2017-09-19 3 views
-1

JavaFXプログラムにListViewのIPアドレスのリストがあるので、これらのアドレスを定期的にループして、それぞれにINetAddress.isReachableを呼び出します。問題は各呼び出しにタイムアウトが関連付けられていることです。つまり、使用できないアドレスのタイムアウトを待機している間にプログラムがハングします。これに対する自然な解決策はスレッディングですが、UIがぶら下がるのを防ぐ方法を見つけられません。私はJavaFx's concurrent packageを試してみましたが、新しいスレッドでタイマーでタイマータスクを実行しようとしました。ここで明白な何かが欠けていると感じます。JavaFx - InetAddressからのタイムアウトを待っている間にUIがハングしないようにする

使用してJavaFXの同時実行:

Task task = new Task() { 
    @Override 
    protected Object call() throws Exception { 
     while(true) { 
      checkEachIP(); 
      Thread.sleep(5000); 
     } 
    } 
}; 

new Thread (task).start(); 
+1

Executors Frameworkを採用するのに適していると思います。 (私はJavaFXの経験はありません) このように、各チェックは別々のタスクになる可能性があります。 – Piohen

+2

これはまともなイントロです。http://winterbe.com/posts/2015/04/07/java8-concurrency-tutorial-thread-executor-examples/ – Piohen

+0

'checkEachIP()'は何をしていますか? –

答えて

-3

あなただけのタスクをバックグラウンドで実行する場合:

変更:

new Thread (task).start(); 

へ:

Thread thread = new Thread (task); 
thread.setDaemon(true); // will run in the background 
thread.start(); 
+2

これは間違っています。デーモンスレッドと非デーモンスレッドの唯一の違いは、前者はjvmが実行中にシャットダウンするのを防ぐことができないことです。 – fabian

関連する問題