2012-04-10 3 views
4

Я начинающий программист, работающий в Eclipse в Windows XP, и мне нужно запустить несколько процессов (это будет симуляция многокомпьютерной системы). Мой первоначальный взлом использовал несколько потоков для нескольких классов, но теперь я пытаюсь заменить потоки процессами.Запустите файл .java с помощью ProcessBuilder

Из моего чтения я почерпнул, что ProcessBuilder - это путь. Я пробовал много много вариантов ввода, которые вы видите ниже, но не может для жизни меня выяснить, как правильно его использовать. Я пытаюсь запустить файлы .java, которые я ранее создал как классы (которые я изменил). Я в конечном итоге просто сделал фиктивный test.java, чтобы убедиться, что мой процесс работает правильно - его единственная функция - напечатать, что она работает.

Мой код для двух файлов приведен ниже. Я правильно использую ProcessBuilder? Является ли это правильным способом для чтения вывода моего подпроцесса? Любая помощь приветствуется.

  • Дэвид

Edit: Решение объявить ProcessBuilder ("java.exe", "- ф", "бен", "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"); 
    } 
} 

ответ

4

Вы вызываете Java компилятор на файл .java, это не будет работать класс. Что вы, вероятно, захотите сделать, это запустить java.exe в вашем .class файле. (например, «java.exe -cp ./bin Broker.test», предполагая, что ваши файлы классов находятся в ./bin)

+1

Точный синтаксис, который закончился работой, был ProcessBuilder («java.exe», »- cp », "бен", "Broker.test"). Благодаря! –

+0

Если мой Broker.test зависит от другой банки, то как я могу добавить банку в ProcessBuilder? –

+0

Я понял. Используется ProcessBuilder («java.exe», «- cp», «bin: example.jar», «Broker.test») –

Смежные вопросы