0

私のコード:

...
this.mainWindow.desk.repaint();
....
function();
...
this.mainWindow.desk.repaint();
...

最初の再描画はすぐには処理されませんが、2 回目の再描画を待ってから、両方が一緒に処理されます。2番目の再描画を待たずに、すぐに再描画を呼び出すにはどうすればよいですか?

4

2 に答える 2

2

repaintイベント ディスパッチ スレッドのワーク キューに描画要求を配置するだけです。コードをイベント ディスパッチ スレッド (イベント ハンドラー内) で実行している可能性があるため、それ以降の作業項目の処理をブロックしています。これを修正する最もクリーンな方法は、function呼び出しを aでラップしてRunnableに渡すことEventQueue.invokeLaterです。次に、コードは 3 つの個別の作業項目をキューに追加します。

  1. 再描画リクエスト;
  2. への呼び出しfunction;
  3. 別の再描画要求。

気をつけてください: がfunction含まれThread.sleepていて、そのように見える場合は、EDT を再びブロックすることになります。何かをペイントしたい場合は、しばらくそのままにしてから別のペイントを行います。次に、2 番目のイメージのペイントを Swing の でスケジュールする必要がありますTimer

于 2013-05-06T14:50:49.387 に答える
1

別のスレッドで関数を開始します。これが不可能な場合は、JComponent の paintImmediately メソッドを調べてください。

于 2013-05-06T14:50:40.437 に答える