Окно SWT перестает отвечать на запросы при обновлении индикатора выполнения из потокаJAVA

Программисты JAVA общаются здесь
Anonymous
Окно SWT перестает отвечать на запросы при обновлении индикатора выполнения из потока

Сообщение Anonymous »

Я пишу Java-приложение SWT для обработки файлов журналов сервера и создания таблицы Excel с некоторой аналитикой, и у меня нет проблем с этим.

Возникает проблема когда я пытаюсь обновить индикатор выполнения.

Вот основной поток кода. Пользователь выбирает файл журнала с помощью каталогаDialog и нажимает кнопку запуска. При нажатии кнопки выполняется следующий код.

Код: Выделить всё

startButton.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
pm.setUserData(ud,progressBar);
progressBar.getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
pm.startProcessing();
}
});
}
В классе, где происходит фактическая обработка файла, есть простые циклы while, которые выполняются до тех пор, пока не достигнет конца файла. После чтения каждой строки из файла я вызываю метод, который обновляет индикатор выполнения.

Код: Выделить всё

while ((logEntry = br.readLine()) != null) {
readSize += logEntry.length() + 1;
//some long processing logic
progressBar.setSelection(getProgress());
}
getProgress() — простой метод, который вычисляет процентиль прочитанного файла

Код: Выделить всё

(read/total)*100
Вышеуказанная программа работает. Я получаю ожидаемый результат. Индикатор выполнения обновляется, но графический интерфейс перестает отвечать на запросы. Я не могу переместить окно. Я не могу нажать кнопку закрытия.

Я пробовал использовать Swing Worker и display.asyncExec()

Подробнее здесь: https://stackoverflow.com/questions/303 ... m-a-thread

Вернуться в «JAVA»