使用ProcessBuilder运行.java文件

Dav*_*d K 5 java multiprocessing processbuilder

我是Windows XP上Eclipse工作的新手程序员,我需要运行多个进程(这将是一个多计算机系统的模拟).我的初始hackup使用多个线程到多个类,但现在我正在尝试用进程替换线程.

从我的阅读中,我发现ProcessBuilder是最佳选择.我已经尝试了下面看到的许多版本的输入,但是在我的生活中无法弄清楚如何正确使用它.我试图运行我以前创建的.java文件作为类(我已修改).我最终只是制作了一个虚拟的test.java,以确保我的进程正常工作 - 它唯一的功能是打印它运行.

我的两个文件的代码如下.我正确使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

}

package Broker;

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

Hel*_* M. 5

您正在调用.java文件上的java编译器,这不会运行该类.您可能想要做的是在.class文件上运行java.exe.(例如"java.exe -cp ./bin Broker.test",假设你的类文件是./bin)