【发布时间】:2011-10-12 00:35:00
【问题描述】:
我希望 GUI 在对象被实例化并实际完成工作之前将按钮的标题从“Go”更改为“Working...”。完成后,我希望按钮的标题切换回“开始”。
代码如下:
private class convert implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton button = (JButton)e.getSource();
button.setText("Working...");
button.setEnabled(false);
anObject name = new AnObject();
boolean result = name.methodName(chooser.getSelectedFile(),encoding);
// A bunch of stuff was here but irrelevant to the question,
// so it was removed to save room.
button.setEnabled(true);
button.setText("Go");
}
在实践中实际发生的是 name 被实例化,methodName 被调用,然后按钮在屏幕上被更新,尽管我已经告诉了虚拟机首先更改按钮标题。
我的工作理论是,鉴于我没有使这个程序线程化,这与操作优先级或 JVM 的内部线程或其他东西有关......
有什么建议吗?
【问题讨论】:
-
另一种可能的解决方案是,如果您的“一堆无关紧要的东西......”涉及显示另一个窗口并且您正在使用 JFrame,请改用模态 JDialog。
-
另请参阅我发布的 SwingWorker 和 AbstractAction 解决方案。
标签: java multithreading swing user-interface