我最近在我的Java程序中添加了一个更新程序,所有代码都正常运行。我遇到的问题是,初始程序不会继续运行第二个.jar文件,甚至不会在NetBeans中运行该文件而只是关闭。
我相信这段代码不能正常工作但是我已经完成了一大堆System.out并且它只是直接运行代码而不运行第二个程序:
private void update() {
String[] run = {"java", "-jar", "updater/update.jar"};
try {
Runtime.getRuntime().exec(run);
} catch (Exception ex) {
ex.printStackTrace();
}
System.exit(0);
}
我的文件夹/文件位于此路径中:
LibTiles.jar (initial file that runs this code)
updater/update.jar
任何人都可以看到任何错误或者我在其他地方做错了吗?
答案 0 :(得分:1)
我相信java.exe不在您的PATH环境中。
此外,尝试使用您的文件(添加.exe)启动java.exe或更好的javaw.exe,如下所示:
String[] run = {"java.exe", "-jar", "updater/update.jar"};
如果您不想使用控制台窗口,请使用:
String[] run = {"javaw.exe", "-jar", "updater/update.jar"};
答案 1 :(得分:0)
你的问题的措辞非常令人困惑。你提到了LibTiles.jar,你发布了一个在updater / update.jar中运行main方法的代码片段。 update.jar中的代码是否需要LibTiles.jar中的.class文件?
我可以想到两个可能的问题,这两个问题都是由于update.jar中缺少清单造成的。它必须说主要方法是什么,它还包含类路径。我建议你阅读this。
您还应该使用Process编写方法,例如example:
import java.io.*;
import java.util.*;
public class DoProcessBuilder {
public static void main(String args[]) throws IOException {
if (args.length <= 0) {
System.err.println("Need command to run");
System.exit(-1);
}
Process process = new ProcessBuilder(args).start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:",
Arrays.toString(args));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}