1

JavaWebアプリケーションからc++実行可能ファイルを実行しようとしています。関連するページに移動すると、コマンドが実行され、実行可能ファイルが実行されますが、出力は生成されません。

これが私のコードです:

URL createWav = QRcodeController.class.getClassLoader().getResource("createWav");
log.info("The path of the c++ executable obtained: "+ createWav.getPath());
Process p1 = Runtime.getRuntime().exec("chmod 777 " + createWav.getPath());
p1.waitFor();
int exitVal=1;
try {
        Process p2 = Runtime.getRuntime().exec(createWav.getPath(), args);
        exitVal = p2.waitFor();
}
catch (Exception e)
{
    log.error(e.getStackTrace());
}
if(exitVal == 1)
    throw new Exception("Error in c++ program");

エラーをスローしないため、c ++プログラムは正常に実行されますが、想定されるファイルは生成されません。同じマシンのコマンドラインから同じコマンドを実行すると、必要なファイルが完全に生成されます。何が間違っているのかわかりません。

4

2 に答える 2

2

プロセスから出力ストリームとエラーストリームを取得して、何が起こるかを確認します。

今、あなたは盲目的に働いています。

于 2012-06-28T10:40:58.890 に答える
1

C ++プログラムは、Javaプログラムの標準出力ではなく、その出力をパイプに書き込んでいます。Process.getOutputStream ()を使用してそのストリームにアクセスするか、Java 1.7では、次のようにredirectOutputProcessBuilderを使用できる場所を使用します。

pb.redirectOutput(ProcessBuilder.Redirect.INHERIT)

C ++プログラム標準エラーストリームに書き込みを行う可能性がある場合は、おそらく同じ方法で処理する必要があります。

また、これらのストリームのいずれかをパイプに接続したままにし、そのパイプから読み取らないと、パイプに関連付けられたバッファーがいっぱいになると、アプリケーションが出力をブロックする可能性があることに注意してください。単に出力を無視するには、明示的ににリダイレクトする必要があり/dev/nullます。それは今のあなたの目的ではありませんが、別の状況にあるかもしれません。

于 2012-06-28T10:47:22.023 に答える