JavaFX:如何使用并发来读取外部进程的输出并将其显示在FXML TextArea中?

时间:2013-08-19 16:47:49

标签: java concurrency javafx-2 javafx external-process

以下是我的问题的一个简单示例。假设我有一个使用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秒,而不是每秒一次从进程中读取输出。

0 个答案:

没有答案