我想用在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/

10-15 12:14