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