0

好的,所以我正在尝试在我的 jar 中执行一个类

我将如何让它在 jar 中运行类?如果这甚至可能的话。

    button1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            try {
                Runtime.getRuntime().exec("java -Dfile.encoding=Cp1252 -classpath MiddleEarth728/src/bin;MiddleEarth728/src/lib/libs.jar;MiddleEarth728/src/lib/graphics.jar; MiddleEarth728.src.Loader");
                dispose();
            } catch (Exception err) {
                err.printStackTrace();
            }
        }

    });

    button2.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            try {
                Runtime.getRuntime().exec("Java -Xmx500m client 0 0 highmem members 0");
                dispose();
            } catch (Exception err) {
                err.printStackTrace();
            }
        }

    });
4

2 回答 2

0

为什么不在你的类路径中包含 jar 而只是调用类?

无论如何,如果您确实需要在运行时加载 jar,则必须使用类加载器:

URL[] urls = { new URL("jar:file:" + path + "!/") };
cl = URLClassLoader.newInstance(urls);
cl.loadClass(className);
于 2013-03-28T13:18:51.343 回答
0

你不想'运行一个类',你想执行那个类的主要方法。您可以使用反射来做到这一点。

URL[] urls = { new URL("jar:file:" + path + "!/") };
cl = URLClassLoader.newInstance(urls);
Class clazz = cl.loadClass(className);
Method mainMethod = clazz.getDeclaredMethod("main", String[].class);
mainMethod.invoke(null, new String[]{}); //can add args here if needed

生成不同 JVM 的唯一优势是安全性。

于 2013-03-28T14:18:29.573 回答