Однако это не решило мою задачу.
Так как теперь маленькое окошко модальное, управление программы не движется далее, пока это окошко не будет закрыто, а оно не имеет активных элементов закрытия в моем случае, т.к. я расчитывал закрыть его программно (после завершения задач).
Получается, я не могу писать 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.
Я немного неверно указал про модальность. На самом деле ее там небыло.
Сейчас я внутри реализации окошка с индикатором написал this.setModal(true);
и это сразу привело к тому, что все внутренние элементы отрисовались.
У меня не получается даже отобразить прогрессбар с нулевым значением шкалы. Это должно отрисоваться еще до запуска задач.
Читать полностью…Там начинается "работа", в консоль я вывожу 100 строчек с паузой. Потом процесс заканчивается. Все время, пока выводятся строчки, модальное окно "белое", как все строчки отрисуются, модальное окно скрывается
Читать полностью…под тяжелую задачу лучше бы обычный тред выделить и его стейт писать куда то, откуда ui тред сможет забирать данные
Читать полностью…Код длительного процесса перенес в SwingWorker. Наладил колбек на обновление прогрессбара.
Когда все запускаю, сталкиваюсь с проблемой. Модалное окно, в котором должен быть нарисован прогрессбар, показывается, но внутри пусто - лейбл и прогрессбар полностью отсутствуют. Вызов метода repaint() для модалки не помогает. В чем может быть дело?
Когда длительный процесс заканчивается, отрабатывают методы, скрывающие модальное окно.