如何从另一台计算机上获取外部.jar的课程?

时间:2013-11-24 21:44:43

标签: java

我正在构建一个视频游戏,我也为我的视频游戏构建了一个启动器。启动器下载.jar文件并将其存储在%appdata%文件夹中,供每个购买游戏并下载启动器然后运行它的人使用。

我需要编写几行代码来告诉启动程序从用户的计算机获取.jar文件并从那里运行文件。 .jar已经编译好了,一切都还可以,但是我不太确定如何使用.class文件。

这样的事情可能有所帮助:

import System.getPropery("user.home") + "/AppData/Roaming/GameNameHere/bin/game.jar" + ".runGame.class"

然后我可以做这样的事情:

if (credentials == true) {
     runGame game = new runGame();
     game.start();
}

我该怎么办?提前谢谢。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

所以,我查看了ClassLoader.java类并稍微搞砸了一下,但没有什么真正起作用。我做错了什么?

private String location = System.getProperty("user.home") + "\\Desktop\\myJar.jar";
URL url = new URL(location);

public Load() throws Exception {
    ClassLoader loader = URLClassLoader.newInstance(new URL[]{url}, getClass().getClassLoader());
    Class<?> clazz = Class.forName("gumptastic.MyClass", true, loader);
    Method method = clazz.getMethod("output");
    method.invoke(this);
}

public static void main(String[] args) {
    try {
        new Load();
    } catch (Exception exc) {
        exc.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:1)

不确定你是否熟悉这一点但是 我认为你应该看看课程装载机。

http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html

我想你需要为你的特殊需求写一个简单的。

或者,如果你只使用URLClassLoader会更容易。 下面是一个简单的例子。这个程序不知道Gson类 在编译时。但它可以成功加载它,创建它的实例, 并在运行时使用它。它在Windows 7上进行了测试。

您可以从此处下载Google Gson。 http://code.google.com/p/google-gson/downloads/list

然后将gson-2.2.4.jar文件放在您喜欢的任何位置 在您的计算机上,然后将此程序指向它 以正确的方式设置arr [0]。

然后观察正在发生的魔法:)

import java.lang.reflect.Constructor;
import java.net.URL;
import java.net.URLClassLoader;


public class Test007 {

    public static void main(String[] args) throws Exception {
        URL[] arr = new URL[1];
        arr[0] = new URL("file:///dir1/dir2/dir3/gson-2.2.4.jar");
        URLClassLoader loader = new URLClassLoader(arr);
        Class cls = loader.loadClass("com.google.gson.Gson");
        System.out.println(cls);
        Constructor constructor = cls.getConstructor(new Class[0]);
        Object obj = constructor.newInstance(new Object[0]);
        System.out.println(obj);
        if (obj!=null){
            System.out.println("OK, so now we have an instance of:");
            System.out.println(obj.getClass().getName());
        }
    }

}