Abra e feche com segurança o JDialog modal (usando o SwingWorker)
Eu precisava de uma maneira de obter alguns dados de um banco de dados e impedir que o usuário modificasse os dados existentes naquele momento.
Eu criei um SwingWorker para fazer a atualização do banco de dados e um JDialog modal para mostrar ao usuário o que está acontecendo (com um JProgressBar). A caixa de diálogo modal tem defaultCloseOperation definida como DO_NOTHING, por isso só pode ser fechada com uma chamada adequada - eu usosetVisible(false)
.
MySwingWorkerTask myTask = new MySwingWorkerTask();
myTask.execute();
myModalDialog.setVisible(true);
O SwingWorker faz algumas coisas dentro do doInBackground () e, por último, chama:
myModalDialog.setVisible(false);
Minha única preocupação e minha pergunta: é possível que o SwingWorker execute osetVisible(false)
antes que sejasetVisible(true)
na linha depois que o trabalhador desovar?
Se assim forsetVisible(true)
poderia bloquear para sempre (o usuário não pode fechar a janela modal).
Eu tenho que implementar algo como:
while (!myModalDialog.isVisible()) {
Thread.sleep(150);
}
myModalDialog.setVisible(false);
para se certificar de que realmente será fechado?