将批处理文件输出到 JTextArea

Outputting batch file to JTextArea

我设置了一些代码,据说是 运行 批处理文件。我不确定,因为它没有在控制台中显示任何内容,但是当我单击 JButton PING 时,该按钮会保持单击几秒钟,因此它肯定正在处理某些内容。我需要帮助的是将批处理文件输出到我的 GUI 中的 JTextArea。我不太确定如何将我的代码定向到名为 "textarea" 的 JTextArea。有人可以告诉我如何将 textarea 添加到这段代码中以获得输出吗?谢谢!

JButton btnPingComputer = new JButton("PING");
    btnPingComputer.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                   // create a new process
                 // System.out.println("Creating Process...");
                   Process p = Runtime.getRuntime().exec("c:\ping.bat");

                   // get the input stream of the process and print it
                   InputStream in = p.getInputStream();
                   for (int i = 0; i < in.available(); i++) {
                   System.out.println("" + in.read());
                   }
                   for (int i = 0; i < in.available(); i++) {
                        textArea.append(in.read()+"\n");
                    }
                   // wait for 10 seconds and then destroy the process

                   p.destroy();

                   } catch (Exception ex) {
                   ex.printStackTrace();
                   }




        }
    });

试试这个:

for (int i = 0; i < in.available(); i++) {
    textarea.append(in.read()+"\n");
}

编辑: 我认为 in.available() 也可能存在问题。你可以尝试完全改变这个:

String line;
Process p = Runtime.getRuntime().exec("c:\ping.bat");
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = in.readLine()) != null) {
    System.out.println(line);
    textarea.append(line);
}
in.close();

您可以尝试此代码,它将执行指定的批处理文件并读回批处理文件回显的任何内容。从那里您应该能够获取输入并将其附加到 JTextArea。只要您的蝙蝠回显文本,batOutput 就应该捕捉到它。但是,请注意非标准字符导致的格式错误。

      public static void main(String[] args) {
      String batFile = "C:/test.bat";

      try {
        ProcessBuilder procBuild = new ProcessBuilder(batFile);
        Process proc = procBuild.start();
        InputStream streamIn = proc.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(streamIn));
        String batOutput = null;
        while ((batOutput = br.readLine()) != null) {
          System.out.println(batOutput);
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }