Я немного неверно указал про модальность. На самом деле ее там небыло.
Сейчас я внутри реализации окошка с индикатором написал this.setModal(true);
и это сразу привело к тому, что все внутренние элементы отрисовались.
У меня не получается даже отобразить прогрессбар с нулевым значением шкалы. Это должно отрисоваться еще до запуска задач.
Читать полностью…Там начинается "работа", в консоль я вывожу 100 строчек с паузой. Потом процесс заканчивается. Все время, пока выводятся строчки, модальное окно "белое", как все строчки отрисуются, модальное окно скрывается
Читать полностью…под тяжелую задачу лучше бы обычный тред выделить и его стейт писать куда то, откуда ui тред сможет забирать данные
Читать полностью…Код длительного процесса перенес в SwingWorker. Наладил колбек на обновление прогрессбара.
Когда все запускаю, сталкиваюсь с проблемой. Модалное окно, в котором должен быть нарисован прогрессбар, показывается, но внутри пусто - лейбл и прогрессбар полностью отсутствуют. Вызов метода repaint() для модалки не помогает. В чем может быть дело?
Когда длительный процесс заканчивается, отрабатывают методы, скрывающие модальное окно.
Однако это не решило мою задачу.
Так как теперь маленькое окошко модальное, управление программы не движется далее, пока это окошко не будет закрыто, а оно не имеет активных элементов закрытия в моем случае, т.к. я расчитывал закрыть его программно (после завершения задач).
Получается, я не могу писать this.setModal(true); для него.
Но если я так не делаю, то данное окошко не рендерит свое содержимое.
Наверно можно задачу сократить до следующей:
В обработчике события компонента JFrame создается экземпляр класса, расширяющего JDialog, у которого не прорисовываются его компоненты. Требуется что-то предпринять, чтобы компоненты отрисовались.
Такое ощущение, что на отрисовку компонентов во втором окошке не выделяется процессорного времени.
Я не понимаю как там отладчиком пройтись. Если перейти в этот метод, то в итоге попадаю в интерфейс Executor и там негде брейкпоинт поставить.
Читать полностью…Вчера я еще не заморачивался со всеми этими воркерами, просто вызывал метод показа модального окна и оно было таким недорисованным.
Читать полностью…Метод execute() реализован внутри Свинга. Он в итоге вызывает переопределенный метод doInBackground(), в котором я ставил брейкпоинт, туда управление попадает.
Читать полностью…Выполнение кода длительной обработки у меня стартует из обработчика события клика на компонент в главном окне.
Я сделал класс SwingProcess extends SwingWorker<Boolean, Integer>, в котором реализовал "длительный процесс".
Экземпляр для модального окна я рожаю в том же обработчике события клика в главном окне.SwingProcess swingProcess = new SwingProcess();
swingProcess.configure(null);
swingProcess.execute();
ProgressBarGui progressBarGui = new ProgressBarGui();
progressBarGui.setValue(0);
progressBarGui.setVisible(true);
while (!swingProcess.isDone()) {
int currentProgress = swingProcess.getProgress();
progressBarGui.setValue(currentProgress);
progressBarGui.repaint();
DateTimeTools.waitFewMillis(500L);
}
progressBarGui.setValue(100);
DateTimeTools.waitFewMillis(250L);
progressBarGui.hideWindow();
там есть тред для отрисовки, который нельзя лочить, ты не в него перенес? не помню как он там называется
Читать полностью…Добрый день!
У меня есть Swing окно. По определенному событию в нем требуется запустить длительную задачу и отобразить новое модальное окно с индикатором процесса выполнения.
Я создал класс для модального окна с индикатором (и текстовым лейблом), унаследовав его от JFrame.
Код длительного процесса перенес в SwingWorker. Наладил колбек на обновление прогрессбара.
Когда все запускаю, сталкиваюсь с проблемой. Модалное окно, в котором должен быть нарисован прогрессбар, показывается, но внутри пусто - лейбл и прогрессбар полностью отсутствуют. Вызов метода repaint() для модалки не помогает. В чем может быть дело?
Когда длительный процесс заканчивается, отрабатывают методы, скрывающие модальное окно.
Добрый день!
У меня есть Swing окно. По определенному событию в нем требуется запустить длительную задачу и отобразить новое модальное окно с индикатором процесса выполнения.
Я создал класс для модального окна с индикатором (и текстовым лейблом), унаследовав его от JFrame.