【问题标题】:Run processbuilder and get in and output运行 processbuilder 并进入并输出
【发布时间】:2012-05-18 17:25:28
【问题描述】:

我正在尝试让我的程序启动 Enchanter 以通过 SSH 连接到我的服务器,但似乎无法弄清楚如何进入并输出到 stdinstdout 或任何其他地方.我只是在 Netbeans 中得到一个空白的输出窗口。如何让 Jar 运行并获取输入/输出?

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);
   }
}                                            

【问题讨论】:

  • 您使用的是 Java 6 还是 7? Java 7 中的 ProcessBuilder API 得到了很大改进。
  • 我正在使用 7。编辑是添加 openShell 类。

标签: java jar runtime.exec processbuilder


【解决方案1】:

ProcessBuilder.inheritIO 方法将在您的标准输入、标准输出和标准错误中重定向您的命令流。这适用于 Java 7。

【讨论】:

    【解决方案2】:
    String[] args = {
      "java", 
      "-jar", 
      "C:\\Program Files\\Java\\lib\\enchanter-beanshell-0.6.jar"
    };
    ProcessBuilder builder = new ProcessBuilder(args);
    

    从分解上述论点开始。然后执行When Runtime.exec() won't的所有建议。

    【讨论】:

      【解决方案3】:

      Process.getInputStreamProcess.getOutputStream 方法将为您提供流,然后您可以从中读取和写入。

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 2017-09-21
        • 2018-11-19
        • 1970-01-01
        • 2012-07-19
        • 1970-01-01
        • 2013-03-20
        • 2019-04-14
        • 2015-08-05
        相关资源
        最近更新 更多