2010-09-06 2 views
0

Я пишу программу java и, прежде чем я вызову метод, который сильно использует процессор, я показываю на нем рамку с JProgressBar. Хотя я показываю его перед вызовом метода, JProgressBar не отображается до тех пор, пока метод не будет закончен. Индикатор выполнения не взаимодействует с методом каким-либо образом (пока), и именно поэтому я запутался. Это что-то вроде:java jprogressbar зависает во время тяжелой работы

progressbarframe.setVisible(true); // it is a indeterminate progress bar 
heavyLoadMethod(); 
progressbarframe.dispose(); 

Рамка показывает, но индикатор выполнения не инициализируется во время метода. Есть ли способ решить эту проблему без использования потоков? Каким будет самый простой способ?

Спасибо за ваше время

ответ

3

Вы должны позвонить heavyLoadMethod в отдельной теме. Вы можете использовать java.util.concurrent.Executor для него:

Executor executor = java.util.concurrent.Executors.newSingleThreadExecutor(); 
executor.submit(new Runnable() { public void run() { heavyLoadMethod();}}); 

Теперь метод будет вызываться в отдельном потоке и индикатор будет отображаться правильно.

+0

он работал как шарм, я никогда не использовал потоки, не используя целый класс, и использовал вещь «run runable». Спасибо за вашу идею. – omtinez

+0

Вы должны изучить пакет 'java.util.concurrent'. Он имеет множество высокоуровневых утилит параллелизма. –

1

Вы блокирование EDT от перекраски GUI.

Прочтите раздел из руководства Swing по телефону Concurrency in Swing для полного объяснения проблемы.

Кроме того, ознакомьтесь с разделом «Как использовать контрольные бары» для рабочего примера.

Смежные вопросы