2017-05-09 10 views
0

パフォーマンスとチューニングに関連する機能のために、ネットワークデバイスと統合されたアプリケーションがあります。JavaFxでUIが応答しない

私はJavaFxを使用しています。ネットワークデバイスに接続してログインすると、UIの「応答しません」という応答が表示されます。

どのように問題を解決するかを提案できます。 Login screen shows not respongding

答えて

1

プログラムはネットワークデバイスに接続しており、UIは同じThreadで実行されているため、UIは応答しません。ネットワークデバイスを接続するには、新しいThreadを開始する必要があります。 UIとネットワークデバイスへの接続が2つの異なるスレッドにある場合、UIはフリーズしません。

class YourThread extends Thread{ 
    public void run(){ 
     // Your code to connect to network device 
    } 

    public static void main(String args[]){ 
     YourThread thread = new YourThread(); 
     thread.start(); 
    } 
} 
+0

はい、私は理解しますが、我々は、私は*スレッド*に置くことができない複数の方法でネットワークデバイスに送信する複数のコマンドを持っている必要があり、あなたがUIコンポーネントに回避策を提案することができますか..? – user2964628

+0

アプリケーションが現在ログインを処理中であることをユーザーに示すポップアップウィンドウ(新しいJavaFX'Scene')を作成できます。プログレスバーを実装することができます。次に、すべての接続コードを 'Scene'に入れます。接続が完了すると、その「シーン」が消えます。 – Sky

+0

@ user2964628「私たちはスレッドに入れられない複数の方法でネットワークデバイスに複数のコマンドを送信しています。何故なの? –

1

(ただしこれに限定されない)低速で不安定なチャネルで実行されるI/Oは、応答ユーザーインターフェイスを提供しないようにバインドされています。したがって、重要なI/Oは別のスレッドで行う必要があります。

あなたが持っているオプションの一部は以下のとおりです。

    は、JavaFXの Taskまたは Service、ユーザーからのフィードバックとタスクの進行状況のフィードバックで最も簡単な統合を提供し
  • 使用するJava 8のCompletableFutureを作成
  • 新しいスレッドを起動し
  • またはこれらの連鎖
  • リアクティブプログラミング(多かれ少なかれCompletableFutureです)

参照:Concurrency in JavaFX

関連する問題