Проблема с приложением Swing - PullRequest
3 голосов
/ 25 июня 2009

Я занимаюсь разработкой приложения Swing, и все обычно работает нормально. Но у меня проблема с графическим интерфейсом.

Когда я запускаю приложение и, например, сворачиваю какое-то другое окно, мое приложение все еще работает, но центральная часть JFrame невидима или скрыта. После завершения некоторой части логики программы графический интерфейс перерисовывается и снова становится видимым. Это будет продолжаться до завершения работы программы.

Существует ли какой-либо API для предотвращения такого поведения, или какой-то класс для принудительного отображения графического интерфейса, или, возможно, для добавления индикатора выполнения?

Если кому-то нужна эта информация, я тестирую ее в Windows Vista с java 1.6.

Ответы [ 3 ]

9 голосов
/ 25 июня 2009

Мне кажется, что вы делаете какие-то медленные операции ввода-вывода или вычисления, из-за которых ваш графический интерфейс перестает отвечать на запросы.

Что вам нужно сделать, так это запустить долго выполняющиеся процессы в другом потоке.

Стандартный способ сделать это с классом SwingWorker.

В учебниках по Java есть несколько замечательных ресурсов и руководств по правильному использованию SwingWorker.

.

Здесь и здесь - это ссылка на другой вопрос, который, на мой взгляд, может быть похожим.

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

2 голосов
/ 25 июня 2009

Кажется, вам нужно выполнять свои долгосрочные бизнес-операции в отдельном потоке. Я предлагаю вам использовать SwingWorker.

Проверьте этот простой пример .

2 голосов
/ 25 июня 2009

Точно так же, как jinguy говорит, что вы, скорее всего, выполняете задачу, выполнение которой занимает много времени и которую необходимо поместить в фоновый поток. Посмотрите учебник Java Sun Concurrency in Swing для получения дополнительной информации о том, как сделать это правильно.

...