显示CMD输出在我的GUI(JAVA)
-
21-08-2019 - |
题
我怎么可能会从CMD过程的输出到我的GUI显示?这是我使用运行过程的代码:
try {
String line;
Process p = Runtime.getRuntime().exec("cmd /c \"e:\\folder\\someCommands.cmd\"");
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
我试着这样做:
jLabel1.setText(line);
...但是GUI被完全锁定了,而正在运行的进程,所以没有什么更新,直到最后一刻,这是不是很实用。比其他的CMD工作正常。我刚要显示在实时输出。
解决方案
你设置标签的文本后重绘()?
无论如何,你一般应犹豫的GUI事件线程上执行长时间操作。考虑使用一 SwingWorker
代替。
其他提示
您需要启动一个单独的线程来运行程序。您正在使用运行它的代码可以大多只是插入线程(或Runnable
的)run()
方法是,但设置文本的JLabel的,你应该使用这样的:
...
while ((line = input.readLine()) != null) {
SwingUtilities.invokeLater(new SetTextRunnable(jLabel1, line));
}
...
class SetTextRunnable implements Runnable {
private String line;
private JLabel jLabel1
public SetTextRunnable(JLabel jLabel1, String line) {
this.jLabel1 = jLabel1;
this.line = line;
}
public void run() {
jLabel1.setText(line);
}
}
修改的:刚刚发现的东西。显然类SwingWorker
是专为这样的事情,所以这是你另一个选项(如果它在你的Java版本存在)
编辑在编辑的:太傻了,我没有注意到SwingWorker
在另一个答案已经提到
在除了其他人所说关于多线程的这一点 - 你也想读子进程的错误流。我认为,(在某些情况下),如果你不外流的过程中,错误流可能导致其挂起。
不隶属于 StackOverflow