如何在java中运行.jar文件
我正在为我的项目做一个更新功能,它工作得很好,直到我想要它重新启动,基本上我下载了新文件并用旧文件替换它,然后我想再次运行它,现在由于某种原因它没有运行,我没有得到任何错误 以下是完整的更新类: 下面是我用来运行.jar文件的方法:如何在java中运行.jar文件,java,jar,Java,Jar,我正在为我的项目做一个更新功能,它工作得很好,直到我想要它重新启动,基本上我下载了新文件并用旧文件替换它,然后我想再次运行它,现在由于某种原因它没有运行,我没有得到任何错误 以下是完整的更新类: 下面是我用来运行.jar文件的方法: String currDir = new File("(CoN).jar").getAbsolutePath(); Process runManager = Runtime.getRuntime().exec("java -jar " + currDir);
String currDir = new File("(CoN).jar").getAbsolutePath();
Process runManager = Runtime.getRuntime().exec("java -jar " + currDir);
进程的类
特别指出,如果不捕获进程的输出流并立即读取,进程可能会停止。如果是这种情况,那么您将看不到开始运行的流程。我认为您必须捕获流,如下所示:
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);
}
我不清楚,为什么需要通过调用exec()
来运行jar。考虑到您需要从Java程序运行.jar文件中的代码,您可以简单地运行jar清单中定义的main()
方法,并捕获其输出(无论在何处)
当您需要从底层操作系统调用程序时,可以使用exec()
,但是如果调用方和被调用方都是Java程序,则有更简单的方法来实现这一点
现在,如果您的jar将要动态更改,并且您需要根据新的jar更新您的程序,那么有一些机制可以重新加载其内容,例如查看另一个jar。exec
函数不会自动查找启动进程的路径,因此,您必须传递java
二进制文件的完整路径
您可以通过使用
java.home
系统属性来实现这一点,请参见以下答案:这里似乎没有人帮助我,所以我去问我的朋友,我几乎做到了。它可能要求字符串是数组
解决方案:
String[] cmd = {"java", "-jar", currDir};
try {
Runtime.getRuntime().exec(cmd);
} catch (IOException e1) {
e1.printStackTrace();
}
在运行这个jar之后或运行期间,您希望得到什么?您是否希望能够退出当前的Java进程并将其替换为您刚刚启动的Java进程?考虑到Sun在Process类上提到的I/O限制,我不确定这是否可行。不过,我见过许多Java应用程序“自动更新”,所以一定有一些推荐的设计。我不确定你们是否理解我的意思,我说一切都很好,直到我再次运行它。。。那么为什么我需要输入流呢?我所要做的就是在替换.jar之后运行它,