2014-01-13 1 views
1

У меня есть основной класс, который имеет JProgressBar. Из основного класса я создаю экземпляр класса (с именем Opener), который имеет метод, который читает текстовые файлы, которые обычно большие (> 50000 строк текста).Перекрасить прогрессбар, когда он подключен к другому классу

Передаю ссылку JProgressBar методу класса Opener, который читает txt-файлы, так что progressbar доступен из класса Opener.

Метод определяется следующим образом:

public void readtxtfile (JProgressBar myjProgressBar){....} 

Я называю этот метод следующим образом:

Opener myopener = new Opener(); 
myopener.readtxtfile (jProgressBar1); 

Я знаю, что ссылка на ProgressBar работает правильно, потому что я могу установить его видимым из там (когда основной класс создается, индикатор прогресса установлен не видимым).

В методе readtxtfile я изменяю значение панели выполнения по мере чтения файла txt.

myjProgressBar.setValue(mycounter); 
myjProgressBar.revalidate(); 
myjProgressBar.repaint(); 

Моя проблема заключается в том, что индикатор выполнения не перекрашивается по мере изменения его значения. Что мне делать?

P.S: Когда все чтение файла txt завершено, индикатор выполнения обновляется. Но пока ничего не происходит.

+1

Это звучит, как вы пытаетесь прочитать файл из событий в диспетчерские тему, предотвращая его от выполнения любые перекраски. – MadProgrammer

+1

просто общее примечание: установка основного свойства JSomething (например, _value_ progressbar) никогда не требует revalidate или repaint - это внутренне обрабатывается. – kleopatra

ответ

3

Это похоже на то, что вы пытаетесь прочитать файл из раздела «Диспетчер событий», не позволяя ему выполнять какие-либо преобразования.

Возможно, лучшим вариантом было бы использовать SwingWorker для запуска в фоновом режиме и загрузки содержимого файла и использования его поддержки изменения свойств для обновления прогрессов.

Взгляните на Worker Threads and SwingWorker подробности

Взгляните на this и this примеры

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