2012-05-18 1 views
0

내 프로그램에서 내 서버로 SSH로 Enchanter를 시작하려고 시도하지만 들어오고 출력하는 방법을 알아내어 stdinstdout 또는 다른 곳으로 이동하지 못하는 것으로 보입니다. 그 문제에 대한. 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을 사용하고 있습니까? ProcessBuilder API는 Java 7에서 훨씬 향상되었습니다. – Jeremy

+0

7. 편집을 사용하면 openShell 클래스를 추가 할 수 있습니다. –

답변

0

방법 Process.getInputStreamProcess.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에 적용됩니다.