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