問題があります。 私はループを使って何かを描画し、実行を一時停止するためにスリープを使用します。 その間に、たくさんの行を持っている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. cocos2dxの一時停止メニューで一時停止中にメソッドを呼び出すことができません
- 2. ウェブチャットでsetTimeoutでAJAXを停止すると、同時にチャットラインを表示することができます。
- 3. パフォーマンスの問題を引き起こすGCの一時停止
- 4. calayerが表示されたときにビデオを一時停止する方法
- 5. バインド一時停止し、私は一時停止を割り当て、別のボタンに一時停止することができAHKで同じキー
- 6. アップロード中にBCPが一時停止する - ctrl-Cの後に続きます。
- 7. マウスの移動のトップバーを非表示にして、ビデオが一時停止したときに表示する
- 8. Android:AsyncTaskが完了するまでメインスレッドを一時停止できますか?
- 9. ドラッグしたときにC++/SDLアプリケーションが一時停止する
- 10. DBメンテナンス中にDBCPを一時停止することはできますか?
- 11. スクロールでHTML5ビデオを一時停止または停止できますか?
- 12. アプリがバックグラウンドのときにfirebase接続を一時停止する
- 13. ユーザーがホームボタンを押したときにキーボードを一時停止しますか?
- 14. Chrome(v45)が約束の拒否で一時停止することを防止できますか?
- 15. テキストボックスを停止してポストバックを引き起こします。
- 16. App Storeで在庫状況を停止することはできますが、引き続き最新のアップデートを提供していますか?
- 17. モーダルを閉じる/隠すときにビデオを停止/一時停止する
- 18. ウィンドウがフォーカスを失ったときに、ゲームが一時停止するのをプログラムで防止することはできますか?
- 19. シーンが一時停止しているときにゲームプレイキットが一時停止しない
- 20. Netbeans - Javaアプリケーションが「停止」することはできますか?
- 21. 永続性が完了するまでrootEpicを一時停止します
- 22. Websocketが接続するまで実行を一時停止します
- 23. Zxingライブラリのバーコードスキャンが一時停止または黒い画面を表示することがあります
- 24. 一時停止ボタンが押されたときにプログラムの実行を一時停止する方法
- 25. テストが完了したら、boost :: unit_testを強制的に一時停止することはできますか?
- 26. Jquery:非表示のトップメニュー、一時停止したマウスの動きでスライドする
- 27. ExecutorServiceから特定のスレッドを停止/一時停止できますか?
- 28. シートが再計算されるまでVBAループを一時停止します
- 29. MIDletが一時停止されたときに最後に開いたフォームを再度表示することはできますか?
- 30. 背景を入力するときにWKWebViewを一時停止しますか?
あなたのループが別のスレッドに何をしているのかを考慮する必要があります。この質問だけに基づいて、人々がここで答えるのは難しいでしょう。他のスレッドにそれを考慮しても意味がない場合は、タイマーを作成し、タイマーが呼び出されるたびにループデューティを実行する方が良いでしょう(スリープコールと同じ間隔でタイマーを設定します)。あなたがスリープする前にループを2回以上実行した場合は、タイマー呼び出し中に何度もループを実行してください) –
**スレッド**を使用してください。 –