我需要一种从数据库中获取一些数据并阻止用户修改现有数据的方法。
我创建了一个 SwingWorker 来更新数据库,并创建了一个模态 JDialog 来向用户展示正在发生的事情(使用 JProgressBar)。模态对话框的 defaultCloseOperation 设置为 DO_NOTHING,因此只能通过适当的调用来关闭它 - 我使用setVisible(false)
.
MySwingWorkerTask myTask = new MySwingWorkerTask();
myTask.execute();
myModalDialog.setVisible(true);
SwingWorker 在 doInBackground() 中做了一些事情,最后它调用:
myModalDialog.setVisible(false);
我唯一关心的问题和我的问题:SwingWorker 是否有可能在工人产生之后执行它setVisible(false)
之前setVisible(true)
的行?
如果是这样,setVisible(true)
可能会永远阻塞(用户无法关闭模式窗口)。
我是否必须执行以下操作:
while (!myModalDialog.isVisible()) {
Thread.sleep(150);
}
myModalDialog.setVisible(false);
以确保它实际上会关闭?