問題があります。 私はループを使って何かを描画し、実行を一時停止するためにスリープを使用します。 その間に、たくさんの行を持っているtextAreaのものを見ることができるようにしたいのですが、私はそれらを見るためにスクロールする必要があります。しかし、私はできません。 提案がありますか?おかげさまで ループを一時停止しますが、引き続きテキストを表示することができます
答えて
イベントスレッドでスリープを使用しないでください。私はあなたのものがSwingアプリケーションであると仮定します(これが正しいかどうかを教えてください)。もしそうなら、イベントスレッド上でThread.sleep(...)
を呼び出すとGUI全体が眠ってしまい、応答しなくなります。代わりに、Swingアプリケーションの場合は、Swing Timerを使用します。
チュートリアル:How to Use Swing Timers
編集1
注:そこに多くの勧告はSwingWorkerのを使用するためにここにいる、そしてこれらが有用であることができますが、私は実行する必要があるコードない限り、それらを使用してオフに開催します時間差の間には、非常にCPUが多く、中程度から大規模のファイルを読み込むなど、完了には少し時間がかかります。あなたがやっていることが円を描いてから一時停止してから別のサークルを描くのであれば、SwingWorkerは大過剰ですが、実装する方がはるかに簡単なSwing Timerもやり方です。すべての勧告と同様
、答えはあなたの問題の詳細に依存し、あなたはより多くを教えしたいと思うかもしれません。
@ ada90:編集1を参照してください。編集のため –
+1コメントから彼は言いましたが、彼はただの絵画(EDTで起こるはずです)をしたいと思っていて、次の塗料の前にしばらくお待ちください – Robin
@Robin :ありがとう、あなたの優れた答えも+1。 –
あなたは基本的に(あなたがなどになったと思います)ループの状態を覚えているし、追加を停止する必要があります。ユーザーがスクロールして、「一時停止」したいときは、ループを再開します。
また、別のスレッドで適切なSwingWorker
などを使用してループを実行して、UIスレッドにマーシャリングしてUIに影響を与えてから、別のスレッドでスリープします。それはUIに影響しません。それはかなり厄介になる可能性が高いです。
は、残念ながら、あなたは、任意のコードスニペットを投稿していないと、それはあなたがあなたのテキスト領域をスクロールすることができないという意味ではないものを明確に説明していません。
しかし、私は、あなたがUIスレッドでsleep()
を呼び出しているので、あなたのUIが凍結されているものとすることができます。おそらく、オーバーロードされたpaint()
またはrepaint()
メソッドから呼び出されますか?私の推測が正しい場合は、あなたのループを行い、別のスレッドからスリープしてみてください。おそらくSwingWorker
を使用できます。
もっと具体的な勧告をするには、より多くの情報が必要です。
私はパネル上に何かをペイントしなければなりません、6つの円と、それぞれについて私はいくつかの情報を持っています、別のパネルにはtextAreaが含まれています。ループが一時停止しているとき、私は他のパネルからtextAreaをクリックし、それを最後までスクロールすることができます。 – sonya
あなたは(あなただけの発見など)これは、すべてのUI関連の操作をブロックしますから、UIスレッド上sleep
を呼び出してはなりません。
UIの典型的な使用例は、ワーカースレッド(例えば、クラスによって提供されるような)に重い作業を行い、作業が完了したとき(または一定の間隔で進行状況を表示するために) 。
あなたが一定の間隔でいくつかのコードを実行したい場合は、正しいスレッド上のコードを実行し、2つの実行の間に、UIスレッドの自由を残すTimer
(Swingの変種ではなく、java.util
バージョン)を使用します。
ありがとうございます!私はJava初心者であり、あなたの反応は非常に便利でした。それは今働きます! – sonya
- 1. パフォーマンスの問題を引き起こすGCの一時停止
- 2. ドラッグしたときにC++/SDLアプリケーションが一時停止する
- 3. ユーザーがホームボタンを押したときにキーボードを一時停止しますか?
- 4. Chrome(v45)が約束の拒否で一時停止することを防止できますか?
- 5. テキストボックスを停止してポストバックを引き起こします。
- 6. App Storeで在庫状況を停止することはできますが、引き続き最新のアップデートを提供していますか?
- 7. ウィンドウがフォーカスを失ったときに、ゲームが一時停止するのをプログラムで防止することはできますか?
- 8. Websocketが接続するまで実行を一時停止します
- 9. Zxingライブラリのバーコードスキャンが一時停止または黒い画面を表示することがあります
- 10. 一時停止ボタンが押されたときにプログラムの実行を一時停止する方法
- 11. Jquery:非表示のトップメニュー、一時停止したマウスの動きでスライドする
- 12. MIDletが一時停止されたときに最後に開いたフォームを再度表示することはできますか?
- 13. アプリケーションの一時停止にapplicationWillResignActiveを使用できますか?
- 14. JavaFX2:バックグラウンドのタスク/サービスを一時停止できますか?
- 15. 公開アプリケーションを表示するときの停止時間の表示
- 16. Eclipseをシャットダウンして終了を停止することができます
- 17. アプリがバックグラウンド状態のときにゲームを一時停止できない
- 18. Hoverで機能を停止または一時停止することに問題があります
- 19. ホームボタンを押してiphoneでフラッシュアプリを一時停止することはできますか?
- 20. iOSアプリケーションがクラッシュする/ Xcodeがバックトレースを表示しない(一時停止)
- 21. ブラウザが最小化されたときにSilverlightが一時停止する
- 22. 一時停止ボタンはAVAudioPlayerを一時停止するのではなく停止しています。
- 23. AppleのLoadPresetDemoを実行できませんアプリケーションが一時停止し、Xcodeが私にSIGABRTを与えます
- 24. 一時停止Bashループ
- 25. AndEngineでダイアログが表示されたときに更新が停止する
- 26. ジャスパーレポート:サブレポートが無限ループを引き起こしています
- 27. 端末のナノを一時停止できません
- 28. 機能でオーディオを一時停止または一時停止する
- 29. VBscriptで起動したアプリケーションの実行を一時停止できますか?
- 30. どのようにしてアンドロイドでタイマーを一時停止できますか?
あなたのループが別のスレッドに何をしているのかを考慮する必要があります。この質問だけに基づいて、人々がここで答えるのは難しいでしょう。他のスレッドにそれを考慮しても意味がない場合は、タイマーを作成し、タイマーが呼び出されるたびにループデューティを実行する方が良いでしょう(スリープコールと同じ間隔でタイマーを設定します)。あなたがスリープする前にループを2回以上実行した場合は、タイマー呼び出し中に何度もループを実行してください) –
**スレッド**を使用してください。 –