我想用在GUI中输入的参数触发可执行的命令行。Process
类可用于从Java应用程序派生我所需的命令行过程,并且我使用getInputStream()
对象的Process
方法获取结果并将其显示在GUI中。
private void confirmActionPerformed(java.awt.event.ActionEvent evt) {
String output;
try {
Process p = Runtime.getRuntime().exec("my command line exe with parameters");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((output = stdInput.readLine()) != null) {
TextField.setText(TextField.getText()+output+"\n");
}
} catch (IOException e) {
System.out.println("Exception in Process");
e.printStackTrace();
}
}
这是我的代码,它是按钮按下事件的事件侦听器,并且我试图在文本字段(java swing组件)中显示该过程的结果。
该过程实际上运行了很长时间,并且在命令行运行时显示了一些统计信息,但是当我使用上述代码在GUI中尝试运行时,只有在该过程完成运行后才能获得整个合并结果。我没有在执行时更新
TextField
。造成此问题的原因是什么?
最佳答案
这是因为整个事情都是由Swing事件处理线程完成的。
也许您应该考虑创建一个单独的线程并使用SwingUtilities.invokeLater()更新TextField。
关于java - 从GUI启动命令行工具,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1270867/