1

これがスニペットです

kit.insertHTML(doc, doc.getLength(), "Hello", 0, 0, null);
try{
Thread.sleep(1000);
}catch(Exception e){}

HTMLEditorKit()とをテキストボックスとして使用しHTMLDocument()ています。テキストボックスに「Hello」と表示されてから1秒待ちますが、これを試してみると、1秒待ってから、「Hello」という単語が表示されますが、これは私が望んでいることではありません。

これを論理的な順序に並べているため、なぜこれが発生するのかわかりません。誰かがこれで私を助けることができれば、それは素晴らしいことです。

編集:

誰かが代替案を知っているので、「遅延」のような効果を使用できますか?

4

3 に答える 3

6

Swingイベントスレッド内からThread.sleep(...)を呼び出さないでください。これにより、イベントスレッド自体がスリープ状態になります。このスレッドはすべてのSwingペインティングとユーザー操作を担当するため、これによりアプリケーションがスリープ状態になります。

表示の遅延だけが必要な場合は、スイングタイマーの使用を検討してください。

一方、イベントスレッドが長時間実行されるタスクによって危険にさらされている場合は、SwingWorkerを使用してバックグラウンドでタスクを実行します(Guillaume 1+が彼に提案したように)。

于 2012-05-21T17:38:15.727 に答える
3

sleepEDT(イベントディスパッチスレッド)を呼び出しています。実際、UIがフリーズするため、この状況は回避する必要があります。

この状況を回避するには、代わりにSwingWorkerを使用するか、HFOEの提案に従って、Swingタイマーを使用してください

于 2012-05-21T17:38:45.227 に答える
0

Thread.sleep長時間実行されるタスクです。EDTでこのようなタスクを実行すると、すべての再描画要求の実行がブロックされます。保留中で、スリープフェーズ中に送信されたすべての再描画要求は、将来の処理のためにキューに入れられます。

その結果、EDTがsleepフェーズを終了すると、そのようなすべての再ペイント要求(デフォルトのプロパティである合体が有効になっている場合)が1つの再ペイントに合体して実行されます。合体が有効になっていない場合、キューに入れられたすべての要求は、間にタイムギャップなしでシリアルに実行されます。その結果、UIが更新されなかったようです。

状況を修正するには、SwingTimer特定の時間間隔の後に定期的にトリガーされるa、またはを使用しSwingWorkerます。

于 2013-01-22T15:23:07.823 に答える