2

だから私はこのプログラムを持っています

    String[] cmd = {"gnome-terminal", "--full-screen", "-e", "./toMatrix"};
    Process p = Runtime.getRuntime().exec(cmd);
    copy(p.getInputStream(), System.out);
    p.waitFor();  
    System.out.println("Exit value = " + p.exitValue());

そして、別のプロセスで、CプログラムtoMatrixを実行したいと思います。ただし、新しいターミナルウィンドウとフルスクリーンモードで実行する必要があるため、これらのパラメーターを渡す必要があります。問題は、メインプロセスがプロセスpの終了を待たないことです。私は何が間違っているのですか?

よろしく

4

2 に答える 2

5

例外がスローされない場合、Java はプロセスが終了するのを待っています。手元のタスクを完了せずにプロセスが終了する可能性があります。プロセスからの出力を読み取って表示し、何が問題なのかを調べる必要がある場合があります。

Runtime.exec() の使用に関するこの記事をご覧ください: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

問題のデバッグに役立つことを願っています。

于 2012-12-18T18:01:07.087 に答える
3

waitFor() メソッドは、プロセス p が完了するまで呼び出しスレッドを待機させます (プロセスが無限ループでブロックされた場合、メインスレッドは常に待機するため、危険な場合があります。

いくつかのセマフォ ファイルを作成し、プロセスが Java ファイルから完了したときに値を設定することをお勧めします。メイン メソッドは、セマフォ ファイルのステータスのチェックを待機できます。

于 2012-12-18T18:04:38.950 に答える