2012-01-08 6 views
1

問題があります。 私はループを使って何かを描画し、実行を一時停止するためにスリープを使用します。 その間に、たくさんの行を持っているtextAreaのものを見ることができるようにしたいのですが、私はそれらを見るためにスクロールする必要があります。しかし、私はできません。 提案がありますか?おかげさまで ループを一時停止しますが、引き続きテキストを表示することができます

+0

あなたのループが別のスレッドに何をしているのかを考慮する必要があります。この質問だけに基づいて、人々がここで答えるのは難しいでしょう。他のスレッドにそれを考慮しても意味がない場合は、タイマーを作成し、タイマーが呼び出されるたびにループデューティを実行する方が良いでしょう(スリープコールと同じ間隔でタイマーを設定します)。あなたがスリープする前にループを2回以上実行した場合は、タイマー呼び出し中に何度もループを実行してください) –

+0

**スレッド**を使用してください。 –

答えて

1

イベントスレッドでスリープを使用しないでください。私はあなたのものがSwingアプリケーションであると仮定します(これが正しいかどうかを教えてください)。もしそうなら、イベントスレッド上でThread.sleep(...)を呼び出すとGUI全体が眠ってしまい、応答しなくなります。代わりに、Swingアプリケーションの場合は、Swing Timerを使用します。

チュートリアル:How to Use Swing Timers

編集1
注:そこに多くの勧告はSwingWorkerのを使用するためにここにいる、そしてこれらが有用であることができますが、私は実行する必要があるコードない限り、それらを使用してオフに開催します時間差の間には、非常にCPUが多く、中程度から大規模のファイルを読み込むなど、完了には少し時間がかかります。あなたがやっていることが円を描いてから一時停止してから別のサークルを描くのであれば、SwingWorkerは大過剰ですが、実装する方がはるかに簡単なSwing Timerもやり方です。すべての勧告と同様

、答えはあなたの問題の詳細に依存し、あなたはより多くを教えしたいと思うかもしれません。

+0

@ ada90:編集1を参照してください。編集のため –

+0

+1コメントから彼は言いましたが、彼はただの絵画(EDTで起こるはずです)をしたいと思っていて、次の塗料の前にしばらくお待ちください – Robin

+0

@Robin :ありがとう、あなたの優れた答えも+1。 –

0

あなたは基本的に(あなたがなどになったと思います)ループの状態を覚えているし、追加を停止する必要があります。ユーザーがスクロールして、「一時停止」したいときは、ループを再開します。

また、別のスレッドで適切なSwingWorkerなどを使用してループを実行して、UIスレッドにマーシャリングしてUIに影響を与えてから、別のスレッドでスリープします。それはUIに影響しません。それはかなり厄介になる可能性が高いです。

0

は、残念ながら、あなたは、任意のコードスニペットを投稿していないと、それはあなたがあなたのテキスト領域をスクロールすることができないという意味ではないものを明確に説明していません。

しかし、私は、あなたがUIスレッドでsleep()を呼び出しているので、あなたのUIが凍結されているものとすることができます。おそらく、オーバーロードされたpaint()またはrepaint()メソッドから呼び出されますか?私の推測が正しい場合は、あなたのループを行い、別のスレッドからスリープしてみてください。おそらくSwingWorkerを使用できます。

もっと具体的な勧告をするには、より多くの情報が必要です。

+0

私はパネル上に何かをペイントしなければなりません、6つの円と、それぞれについて私はいくつかの情報を持っています、別のパネルにはtextAreaが含まれています。ループが一時停止しているとき、私は他のパネルからtextAreaをクリックし、それを最後までスクロールすることができます。 – sonya

1

あなたは(あなただけの発見など)これは、すべてのUI関連の操作をブロックしますから、UIスレッド上sleepを呼び出してはなりません。

UIの典型的な使用例は、ワーカースレッド(例えば、クラスによって提供されるような)に重い作業を行い、作業が完了したとき(または一定の間隔で進行状況を表示するために) 。

あなたが一定の間隔でいくつかのコードを実行したい場合は、正しいスレッド上のコードを実行し、2つの実行の間に、UIスレッドの自由を残すTimer(Swingの変種ではなく、java.utilバージョン)を使用します。

+0

ありがとうございます!私はJava初心者であり、あなたの反応は非常に便利でした。それは今働きます! – sonya

関連する問題