Запустите файл .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 зависит от другого jar-файла, как я могу добавить jar-файл в ProcessBuilder? - person thiru_k; 21.08.2013
comment
Я понял. Используемый ProcessBuilder (java.exe, -cp, bin: example.jar, Broker.test) - person thiru_k; 21.08.2013