JavaFX GUIからアプリケーションを起動できません。私はProcessBuilder
を使用しています。プロセスを作成しますが、Javaプログラムを閉じるまで、アプリケーションは起動しません。それは特定のプログラムが引数や私のコードに間違っているのを待っているからですか?Java内の外部アプリケーションの起動
@FXML
private void runWorldpac() {
try {
ProcessBuilder process = new ProcessBuilder("C:\\speedDIAL\\speedDIAL.exe");
Process p = process.start();
} catch (IOException e) {
e.printStackTrace();
}
}
この外部プログラムを閉じるまで、外部アプリケーションは起動しますが、元のアプリケーションとのやり取りは許可されません。新しいスレッド、同じ結果を実行しようとしました。
try {
ProcessBuilder process = new ProcessBuilder("C:\\speedDIAL\\speedDIAL.exe");
Map<String, String> environ = process.environment();
Process p = process.start();
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
//System.out.println(line);
}
System.out.println("Program terminated!");
} catch (IOException e) {
e.printStackTrace();
}
ここで、プロセスで生成されるストリームを処理していますか?それは私がここでやる最初のことの一つであり、自分のプロセスが独自のスレッドで実行されることを保証するものです。 –
この外部アプリケーションはデータをアプリケーションに送り返すことは想定されていませんが、ストリームを処理する必要はありますか?だから私は別のスレッドで実行するように指定する必要がありますか?私はそれがすでにそれをやっていると思ったので、私は私のアプリケーションを閉じると、外部アプリケーションは実行中(実際に実行を開始する)のままです。申し訳ありませんが、私は比較的新しいです。ありがとう。 –
はい、ストリームを絶対に処理する必要があります。そうしないと、アプリケーションがバッファメモリを使い果たし、デッドロックが発生する可能性があります。 [Runtime.exec()が実行されない場合](http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html)をお読みください。この記事には日付情報が含まれています(ProcessBuilderを使用していない)が、そこに含まれる情報の多くはポイント上のものです。 –