因为它现在不工作的原因是处理 GUI 刷新的 Java 线程也处理侦听器的事件。因此,当您调用该setText()
方法时,它会告诉 GUI 线程(称为 EDT for Event Dispatch Thread)更新组件,但现在无法完成,因为 EDT 当前正在actionPerformed()
执行您的代码的方法中。
所以我认为你应该把做任何工作的代码和改变你的 JLabel 的文本放在一个新的线程中。因此,EDT 会在actionPerformed()
JLabel 的文本更改时启动它,然后可以自由地更新 GUI。
像这样:(你必须实现 run 方法)
public void actionPerformed(ActionEvent e) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
myLabel.setText("Processing");
//Do the job
myLabel.setText("Processed");
}
});
t.start();
}
理想情况下,setText()
必须从 EDT 本身调用更改组件的方法和其他方法以避免错误……在我给您的示例中,情况并非如此。如果您想这样做,请使用此方法:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
myLabel.setText("my text");
}
});