使用ProcessBuilder运行.java文件

使用ProcessBuilder运行.java文件,java,multiprocessing,processbuilder,Java,Multiprocessing,Processbuilder,我是一个在WindowsXP上使用Eclipse的新手程序员,我需要运行多个进程(这将是一个多计算机系统的模拟)。我最初的hackup使用多个线程到多个类,但现在我尝试用进程替换线程 从我的阅读中,我了解到ProcessBuilder是一条发展之路。我已经尝试了许多你在下面看到的输入的版本,但是我一辈子都不知道如何正确地使用它。我正在尝试运行我以前创建的类.java文件(我已经修改过)。我最终只是做了一个虚拟test.java来确保我的进程正常工作——它唯一的功能就是打印它运行的数据 这两个文件

我是一个在WindowsXP上使用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();
    }
}
}

子流程

package Broker;

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

您正在.java文件上调用java编译器,这将不会运行该类。您可能需要在.class文件上运行java.exe。(比如“java.exe-cp./bin Broker.test”,假设您的类文件位于./bin中)

最终起作用的确切语法是ProcessBuilder(“java.exe”、“cp”、“bin”、“Broker.test”)。谢谢如果我的Broker.test依赖于另一个jar,那么我如何将jar添加到ProcessBuilder?我知道了。使用ProcessBuilder(“java.exe”、“-cp”、“bin:example.jar”、“Broker.test”)