将批处理文件输出到JTextArea

时间:2015-06-04 22:29:24

标签: java batch-file jtextarea

我有一些代码设置应该运行批处理文件。我不确定,因为它没有在控制台中显示任何内容,但是当我点击JButton PING时,按钮会在点击中保持几秒钟,因此它肯定会处理某些内容。我需要帮助的是将批处理文件输出到我的GUI中的JTextArea。我不确定如何将我的代码导向我的JTextArea,名为" textarea"。有人可以告诉我如何将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();
                   }




        }
    });

2 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:0)

您可以尝试使用此代码,该代码将执行指定的批处理文件,并回读批处理文件回送的任何内容。从那里你应该能够获取输入并将其附加到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();
      }
    }