私はスケジュールデータベースのポーリングを必要とするJavaのシステムトレイUIを持っています。新しいスレッドを生成してUIに通知するための最良の方法は何ですか?スイング:スケジュールされたスレッドからUIに値を戻す
私はSwingを使い慣れており、スレッドモデルです。
私はスケジュールデータベースのポーリングを必要とするJavaのシステムトレイUIを持っています。新しいスレッドを生成してUIに通知するための最良の方法は何ですか?スイング:スケジュールされたスレッドからUIに値を戻す
私はSwingを使い慣れており、スレッドモデルです。
SwingWorker
はこれを行うために設計されたものです。
これにより、GUIをブロックしないタスクを実行してから、値を返して、完了したらGUIを更新できます。
JavaはSwingWorker
の使用方法についてはgreat tutorialです。
基本的にデータベースはdoInBackground()
メソッドで取得します。そして、done()
メソッドで、GUIを更新します。
jinguyが述べたように、SwingWorkerはあなたが最初に見るべき場所です。 Wikipediaには、JavaDocsに取り組む前に見ておくとよいかもしれない興味深い例がいくつかあります。
ここで述べたように、SwingWorkerはここで複雑さを抽象化するのに役立ちますが、基本的に新しいスレッドで作業を行い、メソッドが戻ったらスイングスレッドのGUIを更新する必要があります。 SwingWorkerを使用していない場合、基礎となるメソッドはSwingUtilities(またはEventQueue).invokeLater(Runnable)です。
スイングキューの外側にあるスイング関連(モデルを含む)は何も更新しないため、予測できないことが起こります。また、キューへの参照を保持したり、そのキューを使用したりしないでください(たとえば、モデルダイアログボックスを開いた場合など)。
私はウィキペディアにこのような素晴らしい記事がSwingWorkerであったことは知らない。私はあなたをアップアップしたいと思いますが、並べ替え順の上に私の場所を失いたくない...(申し訳ありません) – jjnguy
そこに行くよ。 '+ 1'! – jjnguy
Grrしかし、あなたがupvotesを取得し続けるなら、私は決してあなたを 'Questions tag Java':P ' – jjnguy