再详细说明一下,我有一个 GUI,如下所示:
然后我在 OK 按钮上有一个 Action 监听器,开始如下:
//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...
从理论上讲,这应该可以实现:
但是,相反,在完成所有方法和连接到 OK 按钮的其他事情之前,我得到以下信息:
这显然不可能发生,因为我们的想法是让取消按钮可用,而确定按钮和其他几个复选框在程序运行期间不可用(图 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 保持响应。
编辑:
如果这更适合您的需要,您也可以使用 invokeAndWait
。 Link to related answer
关于java - 在运行 ActionEvent 之前 GUI 没有在视觉上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17974940/