少し問題があります。今は小さな Java プロジェクトに取り組まなければなりません。Button イベント ハンドラーからいくつかのスレッドを実行しようとしています。次に、最後のスレッドが UI の TextArea を更新する必要があります。スレッドは計算作業を行っています。最も重要な部分は、UI woks をうまくすることです。UI をフリーズしたくありません。もちろん、UI の TextArea を定期的に他のスレッドの 1 つ (UI のものではない) から更新したいと考えています。だからここに私のコードの一部があります:
Button のイベント ハンドラー内で、次の 4 つのスレッドを開始しています。
Thread generate = new CombinaMaker();
generate.run();
Thread forward = new TranslateForward();
forward.run();
Thread backward = new TranslateBackward();
backward.run();
Thread refresh = new Refresher();
refresh.run();
スレッドを同時に動作させたい。Refresher スレッドは、定期的に UI TextArea コンポーネントを更新する必要があります。
したがって、Refresher スレッドから UI を更新する方法は次のとおりです。
public static void updateProgress()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//HERE
//I have a loop that have to be looping at every 500 ms
}
}
}
私の質問は次のとおりです。これをリンクする必要がありますか? 私はシンプルで効果的である必要があります。このループは、アプリケーションが動作している限りループしているに違いないため、私を悲しくさせます。これがUIをフリーズさせる理由でしょうか?どこかで大きな間違いを犯していることはわかっていますが、現時点ではそれを一人で見つけることはできません。簡単な解決策を提案できるかもしれません。そして最後の考え - 最初の 4 つのスレッド: UI をフリーズせずに、それらを「同時に」開始したいと考えています。その方法(イベントハンドラーからこのように開始する...)は正しいですか、それとももっと良いのでしょうか?たくさんの友達に感謝します!
PS。「リフレッシャー」スレッドを使用して UI を更新するのが難しい場合は、妥協案の準備ができています - 彼自身のスレッド (UI スレッド) を介して UI を更新します。しかし、この場合、UI のフリーズを回避するために、何らかの「タイム シューティング メカニズム」を使用する必要があるかもしれません。あなたは何を考えていますか?