10

私はこれについて本当に混乱しています。Java には 2 つの Timer クラスがあり、1 つはswingの下にあり、もう 1 つはutilの下にあります。X を Y 秒ごとに単純に実行したい場合、どちらを使用すればよいですか? これは、GUI を作成している場合、タイマーにスイング バージョンを使用する必要があるということですか?

ありがとう!

4

5 に答える 5

31

javax.swing.Timer と java.util.Timer の違いは次のとおりです。

javax.swing.Timer
  • 少数のタイマーを使用する、より単純なケースに適しています(1ダース未満など)
  • イベントディスパッチスレッドで ActionListener オブジェクトを実行します
  • EventQueue.invokeLater を使用せずに GUI を直接更新できます
  • タスクが完全にイベント ディスパッチ スレッドで実行される場合 (つまり、ワーカー スレッドが生成されない場合)、GUI は、タスクにそれほど時間がかからない場合 (たとえば 300 ミリ秒未満) にのみ応答性を維持します。

java.util.Timer

  • javax.swing.Timer よりもスケーラブルで、追加のスケジューリング機能を備えています
  • プライベートスレッドで TimerTask オブジェクトを実行します
  • GUI を更新するには、EventQueue.invokeLater を使用する必要があります。

Swing タイマーは、次の 2 つの方法で使用できます。

  • 遅れて、タスクを 1 回実行すること。たとえば、ツール ヒント マネージャーは Swing タイマーを使用して、ツール ヒントを表示するタイミングと非表示にするタイミングを決定します。
  • タスクを繰り返し実行すること。たとえば、アニメーションを実行したり、目標に向けた進行状況を表示するコンポーネントを更新したりできます。

上記の情報のソースは次のとおりですhttp://www.javapractices.com/topic/TopicAction.do?Id=160 およびhttp://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html

X を Y 秒ごとに単純に実行したい場合、どちらを使用すればよいですか?

あなたが何とやり取りしているかに応じて。GUI を操作している場合は を使用しjavax.swing.Timer、それ以外の場合は を使用しますjava.util.Timer

これは、GUI を作成している場合、タイマーにスイング バージョンを使用する必要があるということですか?

はい

于 2013-03-21T19:57:54.243 に答える
2

Swingバージョンは、Swingコンポーネントをレンダリングするためのものです。時間を計る必要がある場合は、utilを使用してください。

于 2013-03-21T19:49:03.430 に答える
2

あなたはちょっと正しいです。タイマーの影響を受けるUI作業を行う場合は、swingコンポーネントを使用することをお勧めします。utilタイマーはUI要素自体を設定できません。これは素晴らしい比較です。

于 2013-03-21T19:49:11.900 に答える
2

v 1.3 では、別の Timer クラスが Java プラットフォームに追加されました: java.util.Timer。それと javax.swing.Timer はどちらも同じ基本機能を提供しますが、java.util.Timer はより一般的で、より多くの機能を備えています。javax.swing.Timer には、GUI での使用を少し簡単にする 2 つの機能があります。第 1 に、そのイベント処理メタファは GUI プログラマーになじみがあり、イベント ディスパッチ スレッドの処理を少し簡単にすることができます。2 つ目は、自動スレッド共有により、スレッドの生成が多すぎるのを避けるために特別な手順を実行する必要がないことです。代わりに、タイマーは、カーソルの点滅やツール ヒントの表示などに使用されるのと同じスレッドを使用します。

The Java Tutorial のセクションである How to Use Timers にアクセスすると、タイマーの使用に関する詳細なドキュメントといくつかの例を見つけることができます。その他の例と、この Timer クラスと java.util.Timer のどちらを選択するかについては、The Swing Connection の記事、Using Timers in Swing Applications を参照してください。

公式ドキュメントから。

于 2013-03-21T19:50:19.743 に答える