为了详细说明一下,我有一个如下所示的 GUI:
然后我在“确定”按钮上有一个动作侦听器,其开头如下:
//OK Button Action Listener
private void okButtonActionPerformed(ActionEvent e) {
//Enable/Disable Buttons
okButton.setEnabled(false);
cancelButton.setEnabled(true);
updateCheckbox.setEnabled(false);
//Move on to a series of other methods here...
从理论上讲,这应该可以实现这一点:
然而,相反,我得到以下信息,直到所有方法和连接到“确定”按钮的其他内容完成:
这显然不可能发生,因为我们的想法是让取消按钮可用,而确定按钮和其他几个复选框在程序运行期间不可用(图 2),相反,它会冻结在半状态(图 3)。有什么办法可以解决这个问题吗?
每次从 GUI 执行逻辑时,您都应该按以下方式使用 SwingWorker:
SwingWorker myWorker= new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
//Execute your logic
return null;
}
};
myWorker.execute();
如果您想从此逻辑内部更新 GUI,请使用 InvokeLater:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//To update your GUI
}
});
这样您就可以确保您的逻辑和 GUI 保持响应。
Edit:
你也可以使用invokeAndWait
如果这更适合您的需求。相关答案链接 https://stackoverflow.com/a/3173041/1611957
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)