从Java应用程序执行Jar文件

时间:2012-12-12 19:17:18

标签: java cmd processbuilder

我编写了两个方法来尝试从我的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());
}

3 个答案:

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