如何在java中运行.jar文件

时间:2011-11-23 20:48:47

标签: java jar

我正在为我的项目制作更新功能,它工作得很好,直到我希望它重新启动,基本上我下载新文件并用旧文件替换它,然后我想再次运行它,现在用于某些原因它没有运行,我没有得到任何错误...

这是完整的更新类: http://dl.dropbox.com/u/38414202/Update.txt

以下是我用来运行.jar文件的方法:

 String currDir = new File("(CoN).jar").getAbsolutePath();
 Process runManager = Runtime.getRuntime().exec("java -jar " + currDir);

5 个答案:

答案 0 :(得分:1)

我不清楚为什么你需要通过调用exec()来运行jar。鉴于您需要从Java程序运行.jar文件中的代码,您只需运行jar清单中定义的main()方法,并捕获其输出 - 无论在何处。

当您需要从底层操作系统调用程序时,使用exec()是正常的,但如果调用者和被调用者都是Java程序,则有更简单的方法可以执行此操作。

现在,如果您的jar会动态更改并且您需要根据新jar更新您的程序,则有重新加载其内容的机制,例如,看看另一个post

答案 1 :(得分:0)

Process类的JavaDocs特别指出,如果您没有捕获进程的输出流并立即读取它,则该进程可能会停止。如果是这种情况,那么您将看不到您开始运行的流程。

答案 2 :(得分:0)

我认为你必须像这样捕获stream

BufferedReader stdInput = new BufferedReader(new InputStreamReader(runManager.getInputStream()),8*1024);

BufferedReader stdError = new BufferedReader(new InputStreamReader(runManager.getErrorStream()));

// read the output from the command

String s = null;
System.out.println("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
    }

答案 3 :(得分:0)

exec函数不会自动查找PATH以启动进程,因此您必须传递java二进制文件的完整路径。

您可以使用java.home系统属性执行此操作,请参阅以下答案:ProcessBuilder - Start another process / JVM - HowTo?

答案 4 :(得分:0)

这里似乎没有人帮助我,所以我去问我的朋友,我几乎是对的。它非常需要字符串作为数组。

溶液:

String[] cmd = {"java", "-jar", currDir};
try {
  Runtime.getRuntime().exec(cmd);
} catch (IOException e1) {
  e1.printStackTrace();
}