0

我编写了 2 种方法来尝试从我的 Java 应用程序执行 Jar 文件,但它们都没有做任何事情。Java Runtime Environment 安装在 C: 驱动器上,默认情况下其 Path 指向 C: 驱动器上的目录。我尝试执行的 Jar 文件位于 E: 驱动器上。

jar 位置:E:\Demo Folder\MyDemo.jar

我尝试使用以下 2 种方法执行 MyDemo.jar:

方法一:

try {
    Runtime.getRuntime().exec("cmd /c start %SystemDrive%\\java -jar " + "E:/Demo Folder/MyDemo.jar");
} catch (IOException ex) {
    System.err.println(ex.getMessage());
}

方法二:

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

3 回答 3

1

您没有尝试将调用逻辑放在 E:/Demo Folder/rundemo.bat`(或 .cmd)文件中,然后从您的 java 中调用该 .bat 吗?这通常更理智,更容易排除故障。

于 2012-12-12T20:09:26.397 回答
1

我猜问题是jar文件路径中的空间。尝试这个:

new ProcessBuilder("java", "-jar", "\"E:/Demo Folder/MyDemo.jar\"");
于 2012-12-12T21:05:10.543 回答
1

要启动外部 java 可执行应用程序,您必须首先找到 java.exe 文件(加载 JVM)并传递 -jar 参数以指示加载可执行 JAR 文件。在您提供的两种方法中,您的代码中都有小错误。

在方法一中:

cmd /c 开始 %SystemDrive%\\java -jar

%SystemDrive% 被视为字符串文字,因为 java 不知道 Windows 特定的环境变量。

在方法二中:

“java”、“-jar”、“E:/Demo 文件夹/MyDemo.jar”

您假设 java.exe 已添加到 PATH 环境变量中,但情况可能并非如此。此外,根据您对“%”运算符的使用,我假设您在 Windows 机器上,因此它使用 \ 作为目录...“E:/Demo Folder/MyDemo.jar”可能不会返回有效位置。

尝试以下代码段:

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());
}
于 2013-01-03T23:09:51.590 回答