0

Java アプリケーションから Jar ファイルを試して実行するために書いた 2 つのメソッドがありますが、どちらも何もしていません。Java Runtime Environment は C: ドライブにインストールされ、デフォルトでパスは C: ドライブのディレクトリを指します。実行しようとしている Jar ファイルは E: ドライブにあります。

Jar の場所: E:\Demo Folder\MyDemo.jar

次の 2 つの方法を使用して 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());
}
4

3 に答える 3

1

外部の Java 実行可能アプリケーションを起動するには、最初に java.exe ファイル (JVM をロードする) を見つけ、引数 -jar を渡して実行可能 JAR ファイルのロードを示す必要があります。あなたが提供した両方の方法で、コード内に小さなエラーがありました。

方法 1:

cmd /c start %SystemDrive%\\java -jar

%SystemDrive% は、Java が Windows 固有の環境変数を認識しないため、文字列リテラルとして扱われています。

方法 2:

"java"、"-jar"、"E:/Demo Folder/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 に答える
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 に答える