0

我有一个作为迷你项目创建的启动器,我正在尝试执行一个 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) {

            }

        }
    });

我到处搜索,每个人都说这段代码有效,但它不适合我。有什么建议么?

4

2 回答 2

1

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

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

这基本上就是您正在运行的内容。

另外,打印您的堆栈跟踪。尤其是在开发过程中。

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

    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();
        }

    }
于 2012-09-13T01:45:06.430 回答
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 的答案会更简单。

于 2012-09-13T02:18:24.830 回答