私のコード:
...
this.mainWindow.desk.repaint();
....
function();
...
this.mainWindow.desk.repaint();
...
最初の再描画はすぐには処理されませんが、2 回目の再描画を待ってから、両方が一緒に処理されます。2番目の再描画を待たずに、すぐに再描画を呼び出すにはどうすればよいですか?
repaint
イベント ディスパッチ スレッドのワーク キューに描画要求を配置するだけです。コードをイベント ディスパッチ スレッド (イベント ハンドラー内) で実行している可能性があるため、それ以降の作業項目の処理をブロックしています。これを修正する最もクリーンな方法は、function
呼び出しを aでラップしてRunnable
に渡すことEventQueue.invokeLater
です。次に、コードは 3 つの個別の作業項目をキューに追加します。
function
;気をつけてください: がfunction
含まれThread.sleep
ていて、そのように見える場合は、EDT を再びブロックすることになります。何かをペイントしたい場合は、しばらくそのままにしてから別のペイントを行います。次に、2 番目のイメージのペイントを Swing の でスケジュールする必要がありますTimer
。
別のスレッドで関数を開始します。これが不可能な場合は、JComponent の paintImmediately メソッドを調べてください。