5

私はWindowsXPのEclipseで作業している初心者プログラマーであり、複数のプロセスを実行する必要があります(これはマルチコンピューターシステムのシミュレーションになります)。私の最初のハックアップでは、複数のクラスに対して複数のスレッドを使用していましたが、現在はスレッドをプロセスに置き換えようとしています。

私の読書から、ProcessBuilderが進むべき道であることがわかりました。以下に示す入力の多くのバージョンを試しましたが、それを適切に使用する方法を一生理解することはできません。以前にクラスとして作成した(変更した).javaファイルを実行しようとしています。最終的には、ダミーのtest.javaを作成して、プロセスが正しく機能していることを確認しました。その唯一の機能は、実行されたことを印刷することです。

2つのファイルの私のコードは以下のとおりです。ProcessBuilderを正しく使用していますか?これは私のサブプロセスの出力を読み取る正しい方法ですか?どんな助けでも大歓迎です。

  • デビッド

編集:解決策は、ProcessBuilder( "java.exe"、 "-cp"、 "bin"、​​ "Broker.test");を宣言することです。

一次プロセス

package Control;
import java.io.*;
import java.lang.*;

public class runSPARmatch {

/**
 * @param args
 */
public static void main(String args[]) {
    try {       
        ProcessBuilder broker = new ProcessBuilder("javac.exe","test.java","src\\Broker\\");
        Process runBroker = broker.start();

        Reader reader = new InputStreamReader(runBroker.getInputStream());
        int ch;
        while((ch = reader.read())!= -1)
            System.out.println((char)ch);
        reader.close();

        runBroker.waitFor();

        System.out.println("Program complete");

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

サブプロセス

package Broker;

public class test {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("This works");
    }
}
4

1 に答える 1

5

.javaファイルでjavaコンパイラを呼び出していますが、これはクラスを実行しません。おそらくやりたいことは、.classファイルでjava.exeを実行することです。(つまり、クラスファイルが./binにあると仮定すると、「java.exe -cp ./binBroker.test」のようなものになります)

于 2012-04-10T17:25:31.363 に答える