質問

最近 Filthy Rich Clients を読んでいて、Javaのバージョンは6ですが、コンカレントフレームワークについては言及されていません。そのため、彼らはjava.util.Timerとjavax.swing.Timerについて話しますが、ExecutorServiceについては話しません。

質問" Java Timer vs ExecutorService &quotでExecutorServiceの利点について読みました;前者よりも後者を使用することにしました。しかし、この本はjavax.swing.Timerについて述べており、Swing開発に特化することの利点です。

つまり、これは、Swing開発(アニメーションボタンなど)の場合、javax.swing.Timerが依然としてより適切な選択肢であるか、それを置き換える新しいConcurrent Frameworkに関連するクラスがあるということですか?

役に立ちましたか?

解決

まあSwing Timerは少なくともEDTで実行されるので、invokeLaterの呼び出しですべてをラップする必要はありません。また、Actions、ActionListeners、およびその他のSwing関連クラスを使用するため、Swingとうまく連携します。

Swing関連タスクにはSwing Timerを使い続け、GUIの更新を伴わないものには新しい並行パッケージを使用します。

そのまま Swingアプリケーションでのタイマーの使用をご覧ください決定を振る(申し訳ありませんが)ための詳細情報が含まれている可能性があります。

他のヒント

単純なスイング関連のものについては、こちら

  

Swingタイマーのタスクは   イベントディスパッチで実行   糸。これは、タスクができることを意味します   コンポーネントを安全に操作しますが、   また、タスクは   迅速に実行します。

反対に、スイングに関連しない、またはより複雑で長い処理操作を実行する必要がある場合、 ExecutorService は非常に堅牢であり、間違いなく進むべき方法です。

brunoがアドバイスしたことを詳しく述べた提案ですが、Swingを中断せずに優れたJava 1.5+同時実行ユーティリティを利用するパターンの1つは、 ExecutorService にすべての面倒な作業をさせることです(brunoが言ったように)ただし、それが完了したら、 ExecutorService スレッドは、実際のUIコンポーネントとの対話を、次のいずれかを使用してRunnableのAWTスレッドに渡す必要があります。

  • javax.swing.SwingUtilities.invokeAndWait(Runnable doRun)
  • javax.swing.SwingUtilities.invokeLater(Runnable doRun)

これらのメソッドは、AWTスレッドによって実行されるランナブルを渡します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top