1

これが私の問題の簡単な例です。JavaFX を使用して GUI を表示する Java アプリがあるとします。ユーザーがスタート ボタンを押すと、アプリは外部サーバーに 15 秒間 ping を送信します。この 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);
    }
}

私が抱えている問題は、プロセスからの出力を毎秒 1 回読み取るのではなく、外部プロセスが完了するのを待っている間、アプリが完全に 15 秒間ハングすることです。

4

0 に答える 0