2012-05-18 3 views
0

Я пытаюсь запустить свою программу для запуска Enchanter на SSH на моем сервере, но не могу понять, как войти и вывести на выход stdin и stdout или где угодно в этом отношении. Я просто получаю пустое окно вывода в Netbeans. Как я могу запустить Jar и получить вход/выход?Запустить processbuilder и войти и вывести

public class openShell { 

public void openShell() throws IOException { 
     String line; 
     Scanner scan = new Scanner(System.in); 
     ProcessBuilder builder = new ProcessBuilder ("C:\\Program Files\\Java\\lib\\enchanter-beanshell-0.6.jar", "myscript.bsh"); 
     builder.redirectErrorStream(true); 
     Process process = builder.start(); 
     OutputStream stdin = process.getOutputStream(); 
     InputStream stderr = process.getErrorStream(); 
     InputStream stdout = process.getInputStream(); 
     BufferedReader reader = new BufferedReader (new InputStreamReader(stdout)); 
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin)); 


     while (scan.hasNext()) { 
     String input = scan.nextLine(); 
     if (input.trim().equals("exit")) { 
      // Putting 'exit' amongst the echo --EOF--s below doesn't work. 
      writer.write("exit\n"); 
     } else { 
      writer.write("((" + input + ") && echo --EOF--) || echo --EOF--\n"); 
     } 
     writer.flush(); 

     line = reader.readLine(); 
     while (line != null && ! line.trim().equals("--EOF--")) { 
      System.out.println ("Stdout: " + line); 
      line = reader.readLine(); 
     } 
     if (line == null) { 
      break; 
     } 
    } 
} 
} 


private void LaunchButtonActionPerformed(ActionEvent evt) { 
    //openShell open = new openShell();  //RUNS BUT NO IN OR OUTPUT 

    //BELOW CODE IS FOR TESTING, JUST TRYING TO GET PROCESSBUILDER TO CONNECT 
    // TO MY JAR 
    try { 
     ProcessBuilder builder = new ProcessBuilder(
     "Java -jar C:\\Program Files\\Java\\lib\\enchanter-beanshell-0.6.jar"); 
     builder.redirectErrorStream(true); 
     Process process = builder.start(); 
    } catch (IOException ex) { 
     Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } 
}            
+1

Вы используете Java 6 или 7? API ProcessBuilder значительно улучшен в Java 7. – Jeremy

+0

Я использую 7. Редактирование должно было добавить класс openShell. –

ответ

0

Методы Process.getInputStream и Process.getOutputStream получите вы потоки, которые вы можете читать и писать.

1
String[] args = { 
    "java", 
    "-jar", 
    "C:\\Program Files\\Java\\lib\\enchanter-beanshell-0.6.jar" 
}; 
ProcessBuilder builder = new ProcessBuilder(args); 

Начните с разрыва аргументов, как указано выше. Затем выполните все рекомендации от When Runtime.exec() won't.

2

Метод ProcessBuilder.inheritIO перенаправляет ваши командные потоки в ваши stdin, stdout и stderr. Это относится к Java 7.

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