在jar里面运行一个类?

时间:2013-03-28 13:14:02

标签: java

好的,我正在尝试在我的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();
            }
        }

    });

2 个答案:

答案 0 :(得分:0)

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

无论如何,如果你真的需要在运行时加载jar,你必须使用类加载器:

URL[] urls = { new URL("jar:file:" + path + "!/") };
cl = URLClassLoader.newInstance(urls);
cl.loadClass(className);

答案 1 :(得分: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的唯一好处就是安全性。