我编写了两个方法来尝试从我的Java应用程序中执行Jar文件,但它们都没有做任何事情。 Java运行时环境安装在C:驱动器上,默认情况下,其Path指向C:驱动器上的目录。我试图执行的Jar文件位于E:驱动器上。
Jar位置:E:\ Demo Folder \ MyDemo.jar
我尝试使用以下两种方法执行MyDemo.jar:
方法1:
try {
Runtime.getRuntime().exec("cmd /c start %SystemDrive%\\java -jar " + "E:/Demo Folder/MyDemo.jar");
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
方法2:
try {
File dirFile = new File("E:/Demo Folder/");
ProcessBuilder pb = new ProcessBuilder("java", "-jar", "E:/Demo Folder/MyDemo.jar");
pb.directory(dirFile);
Process p = pb.start();
} catch (Exception ex) {
System.err.println(ex.getMessage());
}
答案 0 :(得分:1)
你是不是试图把你的调用逻辑放在一个比如说:E:/ Demo Folder / rundemo.bat`(或.cmd)文件中,然后从你的java调用那个.bat?这通常更加清晰,易于排除故障。
答案 1 :(得分:1)
我猜测问题是jar文件路径中的空间。试试这个:
new ProcessBuilder("java", "-jar", "\"E:/Demo Folder/MyDemo.jar\"");
答案 2 :(得分:1)
要启动外部java可执行应用程序,必须首先找到java.exe文件(加载JVM)并传递-jar参数以指示加载可执行JAR文件。在您提供的两种方法中,代码中都存在轻微错误。
方法一:
cmd / c start%SystemDrive%\\ java -jar
%SystemDrive%被视为字符串文字,因为java不知道Windows特定的环境变量。
方法二:
“java”,“ - jar”,“E:/ Demo Folder / MyDemo.jar”
您假设已将java.exe添加到PATH环境变量中,但可能并非如此。此外,根据您对“%”运算符的使用,我假设您使用的是Windows机器,因此使用\目录...“E:/ Demo Folder / MyDemo.jar”可能无法返回有效位置。< / p>
尝试以下代码段:
try {
File dirFile = new File("E:\\Demo Folder\\");
ProcessBuilder pb = new ProcessBuilder(System.getProperty("java.home") + File.separator + "bin" + File.separator + "java", "-jar", new File(dirFile, "MyDemo.jar").getAbsolutePath());
pb.directory(dirFile);
Process p = pb.start();
} catch (Exception ex) {
System.err.println(ex.getMessage());
}