0

以下のコマンドを Java プログラムから送信したいのですが、応答を読むことについてあまり気にしません。どうすればこれを行うことができますか

以下のコマンドは、コマンド プロンプトから wav ファイルを再生します。

aplay ~/javafx/examples/PrayerTime/src/Audio/athan1.wav

以下のコードを試していますが、何も再生されません! 私のJavaプログラムから

ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", "aplay ~/javafx/examples/PrayerTime/src/Audio/athan1.wav");
try {
Process process = processBuilder.start();
} catch (IOException ex) {
Logger.getLogger(JavaFXApplication4.class.getName()).log(Level.SEVERE, null, ex);
}
4

1 に答える 1

0

アンドリューは、出力を無視することが問題の核心であると書いているとき、絶対に正しいです。

を介してプロセスを開始するとprocessBuilder.start()、基本的に、独自の寿命を持つ別のプロセスが起動されます。それは火であり、忘れます。スローされた例外によって得られる唯一のフィードバックは、実際の起動が成功しなかった場合です。起動されたプロセスが本来の目的で成功したかどうかについては何も述べていません。

エラー メッセージが表示されないため、プロセスの起動は正常に完了しています。

ここで、 and を使用するaplay~、何らかの Unix、おそらく Linux を使用していることがわかります。そこでは、プロセスが通常の出力を標準出力ストリームに出力し、エラー出力を標準エラー ストリームに出力します。また、物事がスムーズに進んだかどうかを示す終了コードも返します。終了コード ( をprocess使用してオブジェクトから取得できますwaitFor()) とエラー ストリーム (オブジェクトからも取得できます) の両方からprocess、プロセスが成功したかどうか、成功しなかった場合はその理由を示す必要なすべての情報が得られます。

Runtime.exec()とはいえ、少なくともプロセスをエラーなしで呼び出す方法を理解するまでは、はるかに複雑ではないため、実際に使用することをお勧めします。

于 2013-11-24T11:29:03.400 に答える