Стартирайте .java файл с помощта на ProcessBuilder

Аз съм начинаещ програмист, работещ в Eclipse на Windows XP, и трябва да стартирам множество процеси (това ще бъде симулация на многокомпютърна система). Първоначалният ми хак използваше множество нишки за множество класове, но сега се опитвам да заменя нишките с процеси.

От моето четене разбрах, че 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");
    }
}

person David K    schedule 10.04.2012    source източник


Отговори (1)


Вие извиквате java компилатора на .java файла, това няма да изпълни класа. Това, което вероятно искате да направите, е да стартирате java.exe на вашия .class файл. (т.е. нещо като "java.exe -cp ./bin Broker.test", ако приемем, че вашите клас файлове са в ./bin)

person Helmuth M.    schedule 10.04.2012
comment
Точният синтаксис, който в крайна сметка работи, беше ProcessBuilder(java.exe,-cp,bin,Broker.test). Благодаря! - person David K; 10.04.2012
comment
Ако моят Broker.test зависи от друг буркан, тогава как мога да добавя буркана към ProcessBuilder? - person thiru_k; 21.08.2013
comment
Разбрах. Използван ProcessBuilder(java.exe,-cp, bin:example.jar,Broker.test) - person thiru_k; 21.08.2013