2016-11-14 5 views
0

私のScalaプログラムでは、Scalaのプロセスパッケージを使用していくつかのJavaプログラムを実行しています。これらのJavaプログラムは、エラーのために終了することがあります。それが起こると、スタックトレースを含むいくつかのメッセージで終了します。今、私の質問は、どうすれば例外としてそれらのエラーをキャッチすることができます。 catch { case e: Exception => ... }を単に使用すると、それらのエラーは捕捉されません。私はRunTimeExceptionまたはInterruptedExceptionを使用していますが、とにかくExceptionは含まれていませんか?だから、私はそれがまだ問題を解決しないと思った。Scalaで中断されたJavaプロセスをキャッチするには

ところで、私はこれらのプログラムを以下のように起動します。

"java -jar programsName parameters ...".! 
+2

これらのプロセスを起動する方法のコードを追加してください。 – laughedelic

+0

@laughedelic:はい、それを追加しました。 – pythonic

+0

いいえ、あなたはしませんでした。そこには実行しているコマンドラインを示す文字列しかありません。 **これらの引数を使ってjavaを呼び出すために使用しているスカラコードをすべて**表示しているわけではありません。 – GhostCat

答えて

4

あなたが代わりに!!方法でそれを実行した場合、それは出力を返しますか、期待どおり失敗した場合に例外をスロー:

は、このビルダーによって表されるプロセスを開始し、ブロックまで終了し、出力をStringとして返します。標準エラーがコンソールに送信されます。 終了コードがゼロ以外の場合は、例外がスローされます

!メソッドは終了コードを返しますが。

+0

本当ですか? OK、それを試して、それがうまくいくかどうかを見てみましょう。ありがとう。 – pythonic

+0

私はこのコメントのイントネーションを得ていません。引用された(リンクされた)ドキュメンテーションなどを信じていないのですか? – laughedelic

+0

いいえ、私はあなたを信じています。私はちょうど確かめるためにそれを試したいと思う:)。 – pythonic

2

ここには、あなたがしようとしていることを説明しているブログAlvin Alexander's Blogがあります。

第2の例では、通話結果がintであることがわかります。 あなたがしなければならないことは、それが0であるかどうかのチェックです。予想外に終了するプログラマは、non-zero exit codeを与えるべきですか?

いくつかの終了コードには、あらかじめ定義された意味があります(少なくともUNIXシステムの場合)。見てくださいhere

私はこれがあなたの仕事に役立つことを願っています。

PS:Javaコードにアクセスする必要がある場合は、プロジェクトに統合することもできます。 Scalaは直接javaコードとwokを呼び出すことができます(ただし、Javaコレクションをscalaコレクションに変換する必要があります)。

+0

これはチェックするのにも良い方法です。前にそれについて考えなかった:)。 – pythonic

関連する問題