2017-06-13 8 views
1

私のjavaコードは、終了コードをスローするmainメソッドを実行します。JavaはどのようにJava内の終了コードをキャッチできますか?

は、どのように私はその終了コードをキャッチし、ランタイムを停止することはできませんか?

 ConfigValidator.main(new String[] {"-dirs", SdkServiceConfig.s.PROPERTIES_FILE_PATH}); 

私は

 ProcessBuilder builder = new ProcessBuilder(commands); 
     Process process = builder.start(); 
     int waitFor = process.waitFor(); 
     int a = process.exitCode() 

を使用すると思ったが、どのように私はJavaコードを実行するために、これを実行できますか?私は「メイン」メソッド

+0

あなたが提供する情報は不完全であると思われます。あなたはmain()のtry catchにあるものをラップすることを検討しましたか? – Adder

+0

がこの投稿を見つけました:https://stackoverflow.com/questions/5549720/how-to-prevent-calls-to-system-exit-from-terminating-the-jvm –

答えて

0

Javaコードは、終了コードをスローしません。終了コードは整数であり、あなたが整数を投げることができないので、あなたが唯一の例外をスローすることができます

終了コードでを終了Javaコード。

(私は終了コード Javaコード戻っていることを言うことがしたいが、残念ながら、Java言語の設計者は、物事は少し困難に代わり終了コードのmain()関数の戻りvoidを作ることにしました。

次のstackoverflowの回答は、System.exit()の呼び出しを防ぐセキュリティマネージャを使用することを示唆しています。だから、System.exit()を起動しようとする試みは、SecurityExceptionになり、その後、あなたはmain()機能を呼び出す時点からその例外をキャッチすることができます。

のStackOverflow:Java: How to test methods that call System.exit()?

しかし、もちろんのことを行うための正しい方法は、あなたがそのようなハックのことを行う必要がないように、それはSystem.exit()を起動しないようにmain()を再構築することです。

+0

リンクをありがとうございます。しかし、私はJUNIT以外のコードからどのように使用できますか? –

+0

その答えは2つの部分で構成されています.1つは前述した部分とjunit固有の部分です。 junit固有の第2の部分は無視できます。また、junitには魔法はありません。もしあなたが非テストコードでそれを使用する必要があれば、可能です。そして、もしあなたが生産コードから 'main()'を呼び出すような非常にハッキーなことをしているのであれば、junitを含めてもあなたの問題の中で最小限に抑えるべきです。 –

+0

java securityManagerを使用しましたが、ファイルを開こうとするとアクセス権が拒否されます。 –

0

内のコードを変更することはできません

プログラム終了を避けるためのThread.sleep()メソッドを使用してみてください、私はわからない、それはあなたのための適切な解決策です。おそらく、あなたはシステムの入力やsmthであなたのアプリケーションの実行を中断する必要があります。このような。

関連する問題