2012-05-09 1 views
2

я чувствую себя немного плохо об этом вопросе, потому что я думаю, что это, вероятно, не способ, которым JDialog должно быть использовано, но в любом случае:Закрыть яву режимное JDialog из класса владельца (а JFrame)

У меня есть очень простой JDialog, который просто содержит ярлык, и я хочу показать его в ситуациях, когда приложение запускает задачу, которая просто запускается за несколько секунд на основной качающейся нити. Диалог должен быть моделью, чтобы убедиться, что пользователь не может ничего щелкнуть по основному графическому интерфейсу, а короткая задача блокировки - . Когда задача выполнена, модальный диалог следует удалять без любого взаимодействия с пользователем ... и это, похоже, не работает с модальным диалогом, так как после вызова метода setVisible (true), выполнение, похоже, останавливается, и i не может выяснить, как закрыть его со стороны владельца без взаимодействия с пользователем ...

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

+1

Почему бы вам не использовать SwingX 'BusyLabel' или 'BusyPainter'? Вы можете просто поместить ярлык или компонент с живописцем в классная панель и удалить его, когда операция будет завершена. Или еще лучше, используйте 'JXFrame', который предоставляет метод' setWaitPaneVisible (...) '. – Thomas

+0

Если вы каким-то образом можете выполнить эту задачу в своем классе, связанном с JDialog, и назовите его после того, как установили его на 'visible (true)', возможно, это может сработать, хотя сложно сказать без какой-либо части POSTED CODE :( –

+0

спасибо, что намекнул мне на SwingX - в настоящее время я смотрю на API BusyLabel, который выглядит так, как будто я могу использовать его для моих целей - и извините за то, что не опубликовал код примера. Я надеялся описать общую проблему достаточно хорошо, чтобы четко понять, что Я попытался сделать – fischvogel

ответ

2

Да, ваше выполнение остановится, если вы покажете модальный диалог в потоке пользовательского интерфейса. Чтобы преодолеть это, вы можете использовать SwingWorker или даже просто создать новый Thread

+0

1+ для отличного ответа. –