我有一个加载游戏的 jar 文件,我想将它嵌入到 C# 应用程序中。有什么办法可以做到这一点,我认为你可以通过使用 IKVM 来做到这一点,但我似乎可以找到方法。谢谢。
如果您想查看我的 java 代码:(如果您尝试一下,将需要一段时间才能加载)
import java.applet.*;
import java.awt.Dimension;
import java.io.*;
import java.net.*;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.*;
public class OSRSLoader
implements AppletStub
{
static JMenuBar menubar;
static JFrame i;
public static void main(String args[])
throws Exception
{
new OSRSLoader();
}
public OSRSLoader()
throws Exception, FileNotFoundException
{
JFrame i = new JFrame("RS Oldschool Client Beta V1:00");
i.setSize(new Dimension(763, 514));
i.setPreferredSize(new Dimension(763, 514));
JLabel label = new JLabel();
ImageIcon icon = new ImageIcon(new URL("http://www.runescape.com/image/rsp777/oldschool_ani.gif"));
icon.setImageObserver(null);
label.setIcon(icon);
i.add(label);
i.pack();
i.setVisible(true);
String str = getPageSource(new URL("http://oldschool38.runescape.com"));
Pattern pattern = Pattern.compile("gamep\\w+");
Matcher match = pattern.matcher(str);
if(match.find())
{
OSRSLoader stub = new OSRSLoader(Pattern.compile("<param name=\"([^\\s]+)\"\\s+value=\"([^>]*)\">"), str);
Download("http://oldschool38.runescape.com/", (new StringBuilder(String.valueOf(match.group(0)))).append(".jar").toString());
stub.setCodeBase(new URL((new StringBuilder("http://oldschool38.runescape.com/")).append(match.group(0)).append(".jar").toString()));
stub.setDocumentBase(new URL((new StringBuilder("http://oldschool38.runescape.com/")).append(match.group(0)).append(".jar").toString()));
stub.getParameter((String)parameters.get("java_arguments"));
URLClassLoader classLoader = new URLClassLoader(new URL[] {
new URL("file:gamepack.jar")
});
Applet applet = (Applet)classLoader.loadClass("client").newInstance();
applet.setStub(stub);
applet.setSize(new Dimension(763, 504));
applet.init();
applet.start();
i.add(applet);
i.pack();
i.setDefaultCloseOperation(3);
label.setVisible(false);
}
}
private void createMenuBar() {
}
public OSRSLoader(Pattern parameterPattern, String frameSource)
{
String key;
String value;
for(Matcher param = parameterPattern.matcher(frameSource); param.find(); System.out.println((new StringBuilder("Parameter Loaded. Key = ")).append(key).append(", value =").append(value).toString()))
{
key = param.group(1);
value = param.group(2);
parameters.put(key, value);
}
}
private String getPageSource(URL url)
throws IOException, InterruptedException
{
URLConnection cn = url.openConnection();
cn.addRequestProperty("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
cn.addRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
cn.addRequestProperty("Accept-Encoding", "gzip,deflate");
cn.addRequestProperty("Accept-Language", "en-gb,en;q=0.5");
cn.addRequestProperty("Connection", "keep-alive");
cn.addRequestProperty("Host", "www.runescape.com");
cn.addRequestProperty("Keep-Alive", "300");
cn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.01");
DataInputStream di = new DataInputStream(cn.getInputStream());
byte tmp[] = new byte[cn.getContentLength()];
di.readFully(tmp);
di.close();
Thread.sleep(250 + (int)Math.random() * 500);
return new String(tmp);
}
public void appletResize(int i, int j)
{
}
public void setCodeBase(URL codeBase)
{
this.codeBase = codeBase;
}
public void setDocumentBase(URL documentBase)
{
this.documentBase = documentBase;
}
public AppletContext getAppletContext()
{
return null;
}
public URL getCodeBase()
{
return codeBase;
}
public URL getDocumentBase()
{
return documentBase;
}
public String getParameter(String name)
{
return (String)parameters.get(name);
}
public boolean isActive()
{
return false;
}
public static void Download(String world, String archive)
throws Exception
{
URLConnection jarConnection = (new URL((new StringBuilder(String.valueOf(world))).append(archive).toString())).openConnection();
FileOutputStream out = new FileOutputStream("./gamepack.jar");
InputStream input = jarConnection.getInputStream();
byte info[] = new byte[1024];
int ln;
while((ln = input.read(info)) != -1)
out.write(info, 0, ln);
}
private static Map parameters = new HashMap();
private URL codeBase;
private URL documentBase;
}