我已经成功地做到了这一点,当用户点击一个按钮时,命令行语句就会运行,并且他们能够看到它的输出。
但是,只有在命令完成后,它们才能看到它的输出。
我打算让用户看到实时输出,就像他们在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);
}
}
});
答案 0 :(得分:0)
Swing使用单线程模型,因此您可以读取块的GUI线程,并且不会调度任何事件,也不会呈现文本,直到它被释放为止。
您应该创建一个新线程并将所有读取放在那里并使用SwingUtilities.invokeLater在循环中更新JTextArea文本。
您也可以使用SwingWorker。