1

Eclipseから実行されている次のスニペットを検討してください。

外部jarファイルが存在しない場合でも、例外はスローprocessされず、nullではありません。なんでそうなの?

try {
    Process process = Runtime.getRuntime().exec("java -jar NonExisting.jar");

    if (process == null)
            System.out.println("process = null");
    else
        System.out.println(process);
     } catch (IOException e) {
         System.err.println(e);
}

印刷します

java.lang.ProcessImpl@1a4d139

コマンドラインから手動で実行すると、エラーが発生します。

C:\Users\workspace\Project\src>java -jar NonExisting.jar
Error: Unable to access jarfile NonExisting.jar
4

3 に答える 3

2

Process.waitFor()は、生成されたプロセスの終了コードを提供し、ゼロ以外 (つまりエラー) の値を返す可能性があります。この値を確認し、同時にstdout/を収集する必要があります (詳細については、こちらを参照してください)。エラーが報告される可能性があります。errstderr

現在行っていることは、プロセスが呼び出されたことを確認することだけです。次に、プロセスはjarファイルのロードを試行/失敗し、それが存在してエラーを報告するときです。

于 2012-12-10T11:02:23.767 に答える
1

プロセスが作成され、終了しました。オブジェクトの戻り値を確認する必要がありProcessます。新しいプロセスの作成に問題がある場合は例外がスローされるため、ここでは例外は発生しません。

于 2012-12-10T11:01:07.777 に答える
1

おっと、これはかなり見苦しいです :-) 新しいスレッドで jar の Main メソッドを開始しないのはなぜですか? プロセスの終了ステータスを確認する必要があります。

http://en.wikipedia.org/wiki/Exit_status

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Process.htm

あなたは基本的にプロセスをフォークしているので、これから例外やJava固有のものを取得することはできません。他のOS固有のアプリと同様に、新しいプロセスに対処する必要があります。

于 2012-12-10T11:01:27.700 に答える