1

这是我的问题的一个简单示例。假设我有一个使用 JavaFX 显示 GUI 的 java 应用程序。当用户点击开始按钮时,应用 ping 外部服务器 15 秒。这个想法是在这 15 秒内,ping 过程的输出应该出现在应用程序的 GUI 中。这是我到目前为止所拥有的:

1) 我用来构建 JavaFX 布局的 mypackage/App.fxml 文件。2) mypackage/AppController.java 文件 3) mypackage/App.java 文件

在 fxml 文件中,我在 AppController.java 文件中为按下开始按钮时指定了一个控制器。这个控制器看起来像这样:

@FXML
private void handleStartAction(ActionEvent event) {
    try {
        String ping_command = "ping -c 15 google.com";
        console.println("\nCOMMAND> "+ping_command);
        Process p=Runtime.getRuntime().exec(ping_command); 
        p.waitFor(); 
        BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()) );
        String line=null;
        while((line=reader.readLine())!=null)
        {
            console.println(line);
        }
    }
    catch(Exception e) { 
        console.println(e);
    }
}

我遇到的问题是应用程序在等待外部进程完成时仅挂起整整 15 秒,而不是每秒读取一次进程的输出。

4

0 回答 0