2011-10-30 5 views
3

長時間実行しているデータベース操作をどのようにシミュレートできますか?私の要件は、操作が完了するまでJProgressBarを持つダイアログボックスを表示することです。長期実行操作のシミュレーション

+0

長時間実行されているプロセスをシミュレートするには、任意のメソッド内で 'Thread.sleep(millis) 'を使用するだけです。それは簡単です:-) – home

+5

@home、それはそれほど簡単ではありません。あなたはEDTで寝ることができません。 – mre

+1

あなたはこれを意味しますか?:http://stackoverflow.com/questions/1389586/simulation-of-long-running-oracle-db-query –

答えて

6

バックグラウンドスレッド(SwingWorkerによって提供されるものなど)を使用して、forループを1から10に実行し、ループの内部でThread.sleepを実行します。その後、確定モードのJProgressBarであれば、プログレスバーにループインデックスを10 *渡すことでその値を更新できます(もちろん、スイングスレッド、EDTに注意してください)。

編集:
@James Poulson:あなたはSwingWorkerのオブジェクトを使用している場合は、EDT上で更新するpublish/process方法とdoneメソッドを使用します。独自のバックグラウンドスレッドを使用している場合は、Swing呼び出しのグループをRunnableにラップし、invokeLaterを使用してEDTにキューイングしてください。

+0

+1 [ここ](http://stackoverflow.com/questions/4637215/can-a-progress-bar-be-used-in-a)に示されているように、待ち時間をシミュレートするために、ワーカーのバックグラウンドスレッドでスリープ状態にしても問題ありません。 -class-outside-main/4637725#4637725)。 – trashgod

+0

@HovercraftFullOfEels答えをありがとう。 EDTでコンポーネントが更新されることを確認するにはどうすればよいですか?私はinvokeLaterを使用しますか? –

+2

@JamesPoulson:私の答えに編集を参照してください。 –

関連する問題