0

重複の可能性:
javas Process.waitFor()の使用方法は?

PCにArduinoにアップロードするプログラムがあります。コンパイルしてarduinofioにアップロードするためのmakefileを作成しました。

正常に動作します。今、私はそのmakefileを実行するためのJavaプログラムを作成しようとしていますが、この順序に問題があります。

Runtime.getRuntime()。exec( "make");

実行するとプログラムがブロックされます。

その注文を実行するために私がすべきことはありますか?他の注文では、正常に機能します。きれいにし、依存させます。

私はそのタスクのためにインターネットで見つけたこのコードで試しています:

public static void prueba() throws InterruptedException, IOException {

    Process proc = Runtime.getRuntime().exec("make");
    int size;
    String s;
    int exCode = proc.waitFor();
    StringBuffer ret = new StringBuffer();



    while((size = proc.getInputStream().available()) != 0) {
        byte[] b = new byte[size];
        proc.getInputStream().read(b);
        s = new String(b);
        ret.append(s);
    }
    System.out.println(ret.toString());         
}
4

1 に答える 1

1

process.waitFor()ブロッキングを防ぐために、を呼び出す前に、入力ストリーム(stdout)とエラーストリーム(stderr)の両方を別々のスレッドで読み取る必要があります。

この記事は必読です:「Runtime.exec()が実行されない場合」Runtime.execおよび適切な使用方法を示します。

于 2012-12-10T08:51:17.317 に答える