从已编译的程序中执行jar

时间:2012-09-13 00:58:06

标签: java jar runtime

我有一个启动器,我正在创建一个迷你侧项目,我正在尝试执行一个jar文件。我想出了如何执行exe。下面是代码:

mineshaft.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            String mhome = System.getProperty("user.home") + "";
            try {
                Runtime.getRuntime().exec("java -jar .mhome+ \\AppData\\Roaming\\.minecraft\\minecraft.exe");
            }

            catch (Exception a) {

            }

        }
    });

我到处搜索,每个人都说这段代码有效,但对我来说不行。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

首先,你的命令是错误的。 .mhome+? 确保您的命令正确无误。从命令提示符输入以下内容:

java -jar .mhome\AppData\Roaming\.minecraft\minecraft.exe

这基本上就是你正在运行的东西。

另外,打印你的STACKTRACE。特别是在开发过程中。

我认为你正在寻找这样的东西:

    public void actionPerformed(ActionEvent e) {
        String mhome = System.getProperty("user.home") + "";
        try {
            Runtime.getRuntime().exec("java -jar " + mhome + "\\AppData\\Roaming\\.minecraft\\minecraft.jar");
        }

        catch (Exception a) {
             a.printStrackTrace();
        }

    }

答案 1 :(得分:0)

JarInputStream stream = null;

try {   

  File jar = new File("/path/to/jar.jar");
  stream = new JarInputStream(new FileInputStream(jar));
  String mainClass = stream.getManifest().getMainAttributes().getValue("Main-class");
  ClassLoader loader = URLClassLoader.newInstance(new URL[] { jar.toURI().toURL() }, getClass().getClassLoader);
  Class<?> main = Class.forName(mainClass, loader);
  main.getDeclaredMethod("main", String[].class).invoke(null, null);

} finally {
  stream.close();
}

km1的答案更简单,如果它符合您的需求。

相关问题