2017-11-15 4 views
0

私は現在、私は私のGUIのためのJListに供給ウェブサイトからのマッチアップのリストを収集する小さなプログラムに取り組んでいます。GUIをフリーズしないループ方式ですか?

私はループにそれが終了するとマッチアップがリストに表示されないように、リストの要素を更新する方法を求めていました。このためには、常にループを実行する必要がありますが、GUIがフリーズしてしまいます。

私は、周りの道を見つけようとしましたが、私にとってはうまくいかず、新しいスレッドを作成するTimerについて何かを読んでみましたが、最初のループの後に境界から外れているので。

私はそれは私がループする必要があります方法は問題ではありませんので、呼び出すメソッドとは何の関係もないことを確認しました。

誰がどのように私は、全体のGUIを凍結することなくループの方法をすることができますアイデアを持っています。このようなもの

while (true) { 
    dlm.removeAllElements(); //To remove all elements from the List 
    getMatches(); //Adds the matches to dlm whic 
    sleep(6000); //wait 6 seconds to refresh 
} 

これは私がクラッシュしないループをテストするために使用したコードです。

new Thread(new Runnable() { 
    public void run() { 
     while (true) { 
     dlm.removeAllElements(); //To remove all elements from the List 
     getMatches(); //Adds the matches to dlm whic 
     sleep(6000); //wait 6 seconds to refresh 
     } 
    }; 
}).start(); 
+0

に依存しますUIでないループをすればあなたは避けることができます。それを避ける方法はたくさんあります。正しい要素を非同期的に返信して(サーバー側のフィルタ)、リストを動的に構築します。 Angularと特にReactは、これを実現するより現代的でより良い方法を持っていますが、Ajaxの呼び出しはうまくいきます。 –

+0

私が含めたくないオプションは、ボタンを使ってリフレッシュすることです。これは現在私がやっていることですが、ライブスコアを含めることを考えました。そして、私はサーバーや何かからデータを得ることができないので、私はウェブサイトからデータを取得する必要があるので、私はキーワードのすべてのHTML行を読む必要があります。スティックやガムは、彼らが彼らのウェブコードを変更するまで、大部分のために働く。 – estier

+0

本当に必要な場合(AWSラムダやGoogle機能など)、サーバー上で行うことができます。ただし、ブラウザに問題を解決するためにスレッドを使用することはできません。Firefox 57+以外のものにアクセスすることはできません。あなたはリスト全体を再構築(それはDOMへの変更に取り組んでいます)とJS配列内の重複を排除するための効果的な方法についての質問をチェックアウトする必要がないように私が反応に見えると思います。スタックオーバーフロー時のここでの良い答えの読み込み。 –

答えて

2

まずWorker Threadsセクション特に、Concurrency in Swingを見ています。

限られたコードに基づいて、私はまた、How to use Swing Timers

を見ては、スイングがスレッドセーフ、シングルスレッド化されていません、覚えていたお勧めします。これは、(あなたが発見したよう)あなたがユーザーインターフェイススレッドのコンテキスト内で長時間実行またはブロッキング操作を実行してはならないこと、あなたがユーザーインターフェイススレッドのコンテキスト外からUIを更新するべきではありません。どちらのソリューション(SwingWorkerTimerスイングが)あなたが使用あなたがUIを更新する前に、ある程度の期間を待つことを可能にする手段を提供

は、最終的には全体的な問題

関連する問題