1

Eclipse プラグインを開発していますが、問題があります

私のコードは次のとおりです。

String run_pelda = "cmd.exe /C pelda.exe";
Runtime pelda_rt = Runtime.getRuntime();
Process pelda_proc = javacheckgen_rt.exec(run_pelda);

そして、入力ストリームを読みたいと思った後:

InputStream toolstr = tool_proc.getInputStream();
InputStreamReader r = new InputStreamReader(toolstr);
BufferedReader in = new BufferedReader(r);

しかし、新しい Eclipse インスタンスがフリーズします。Javaスレッドでやるべきだと思いますが、残念ながら正しい使い方がわかりません。

アイデアをください!

4

1 に答える 1

0

Runtime.exec()がJavaWorldから送信されない場合の優れた記事を見て、それが役立つかどうかを確認してください。特に、これはおそらくあなたの犯人です:

一部のネイティブプラットフォームでは、標準の入力ストリームと出力ストリームに限られたバッファサイズしか提供されないため、サブプロセスの入力ストリームの書き込みまたは出力ストリームの読み取りに失敗すると、サブプロセスがブロックされ、デッドロックが発生する可能性があります。

この記事では、バックグラウンドスレッドを使用するStreamGobblerクラスのソースコードなど、この問題に対処するためのさまざまな方法を提供しています。stderrstdout

この記事がどれほどうまく持ちこたえたかは驚くべきことです。もともとは2000年に書かれたもので、ほぼすべてがまだ正確であることがわかりました。

于 2010-03-16T23:00:40.790 に答える