java - 使用 ProcessBuilder 运行 .java 文件

标签 java multiprocessing processbuilder

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

根据我的阅读,我发现 ProcessBuilder 是可行的方法。我已经尝试了很多 many 版本的输入,但我终究无法弄清楚如何正确使用它。我正在尝试运行我之前作为类创建的 .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 中)

关于java - 使用 ProcessBuilder 运行 .java 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10093290/

相关文章:

multithreading - 为什么我会选择基于线程/基于进程的方法与异步 Web 服务器

带参数传递的 Java 并行 for 循环

java - 取消 Eclipse 插件作业

java - 如何使用 ProcessBuilder 从 java 运行并行 python 脚本

java - 为什么子对象调用具有 main 方法的父类(super class)的私有(private)方法?

Java:查看ArrayList是否包含具有重复值的ArrayList

java - Netbeans 项目从资源管理器中消失

python - multiprocessing.Pool 在 Linux/Python2.7 上的 terminate() 之后生成新的子进程?

java - ProcessBuilder 找不到命令,尽管它可以在终端中找到

java - 如何在 Java 中读取/写入进程