14

Javaチュートリアルから:

Swingタイマーのタスクは、イベント ディスパッチ スレッドで実行されることに注意してください。これは、タスクがコンポーネントを安全に操作できることを意味しますが、タスクを迅速に実行する必要があることも意味します。タスクの実行に時間がかかる可能性がある場合は、タイマーのSwingWorker代わりに、またはタイマーに加えて を使用することを検討してください。

「急に」ってどういう意味ですか?正確ではありませんが、1分未満は速いですか、それとも何ですか?

たとえば、いくつかのパネルでアニメーション(1分)を作成したい場合、それらを移動して透明度を変更します...そして、ユーザーはパネルを見るだけで、パネルで作業するつもりはありません(私/なし) O)、タイマーはそのような状況に適していますか?

4

3 に答える 3

12

これは、目に見える遅延がほとんどないかまったくないことを意味します。

ただし、ページの後半で、複雑な並行アプリケーションがある場合は、SwingWorkerクラスを調べて、 swing に関する並行性について知っていると述べています。

問題は、すべてがどれだけ速く実行されるかではなく、正しい順序で実行されることです。

SwingWorker では、マルチスレッド Swing アプリには 2 つの主な懸念事項があることがわかります。

  • 時間のかかるタスクは、イベント ディスパッチ スレッドで実行しないでください。そうしないと、アプリケーションが応答しなくなります。

    Swing コンポーネントには、イベント ディスパッチ スレッドでのみアクセスする必要があります。

于 2013-01-22T16:19:33.473 に答える
8

あなたの特定の質問に答えるために。

いくつかのパネルでアニメーション (1 分間) を作成したい場合、それらを移動して透明度を変更します...そして、ユーザーはパネルを見るだけで、パネルで作業するつもりはありません (I/O なし)。 、タイマーはそのような状況に適していますか?

はい、スムーズなアニメーションにはタイマーが必要です。

毎秒 40 フレームを表示するとします。つまり、各パネルの準備と表示に 25 ミリ秒かかります。

明らかに、アニメーション ループの外に移動できる計算が多ければ多いほど、より良い結果が得られます。最近のパーソナル コンピューターでは、パネルをレンダリングするのに数ミリ秒しかかかりません。パネルの計算には、簡単に 25 ミリ秒以上かかることがあります。

つまり、1 分間のアニメーションには 2,400 枚のパネルが必要です。これらのパネルを事前に計算してレンダリングするだけで、アニメーションがよりスムーズになります。

于 2013-01-22T17:24:25.673 に答える
6

このコンテキストでは、クイックの固定時間制限はありません。ただし、数十ミリ秒以上かかるタスクは通常、高速とは見なされないと想定する必要があります。EDT で実行されるコードは、アプリケーションの GUI にあらゆる種類の問題を引き起こす可能性があることに注意してください。そのため、ドキュメントでは代わりに a を使用することをお勧めしていますSwingWorker

また、あなたの遅延にも依存しますTimer。50 ミリ秒ごとに実行される場合、30 ミリ秒実行されるタスクは遅くなります。ただし、タスクが 5 ~ 10 分ごとに 30 ミリ秒しか実行されない場合は、許容できます。Timerアプリケーションに目に見える影響があるかどうかを確認するために、いくつかのテストを実行する必要があります。

EDT の詳細については、この記事を確認してください。また、この回答は、オブジェクトの使用方法に関する多くの情報を提供しSwingWorkerます。

于 2013-01-22T16:27:05.523 に答える