Java输出中的命令行

时间:2016-09-20 11:59:12

标签: java command-line cmd command-prompt

我已经成功地做到了这一点,当用户点击一个按钮时,命令行语句就会运行,并且他们能够看到它的输出。

但是,只有在命令完成后,它们才能看到它的输出。

我打算让用户看到实时输出,就像他们在Windows中使用命令提示符一样。

我可以就如何做到这一点得到一些指导吗?

代码:

Runtime runtime = Runtime.getRuntime();
                try 
                {
                    process = runtime.exec("ping riot.de");
                } 
                catch (IOException e1)
                {
                    System.err.print("Error: " + e1);
                    e1.printStackTrace();
                }
                try 
                {
                    StringBuilder sb = new StringBuilder();
                    BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
                    String line;
                    while ((line = br.readLine()) != null)
                    {
                        sb.append(line);
                        sb.append("\n");
                    }
                    run.setText(sb.toString());
                } 
                catch (IOException e) 
                {
                    System.err.println("Error: " + e);
                }

编辑 - 制作新主题并尝试使用SwingUtilities.invokeLater 这允许您在工作时查看框架组件,但它仍然不会逐行写入textarea。

Runtime runtime = Runtime.getRuntime();
                try 
                {
                    process = runtime.exec("ping riot.de");
                } 
                catch (IOException e1)
                {
                    System.err.print("Error: " + e1);
                    e1.printStackTrace();
                }
            SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    try 
                    {
                        StringBuilder sb = new StringBuilder();
                        BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
                        String line;
                        while ((line = br.readLine()) != null)
                        {
                            sb.append(line);
                            sb.append("\n");
                            run.setText(sb.toString());
                        }
                    } 
                    catch (IOException e) 
                    {
                        System.err.println("Error: " + e);
                    }
                }
            });

1 个答案:

答案 0 :(得分:0)

Swing使用单线程模型,因此您可以读取块的GUI线程,并且不会调度任何事件,也不会呈现文本,直到它被释放为止。

您应该创建一个新线程并将所有读取放在那里并使用SwingUtilities.invokeLater在循环中更新JTextArea文本。

您也可以使用SwingWorker。