【发布时间】:2016-04-24 00:42:47
【问题描述】:
我对这段代码有疑问:
public class Gui_01 extends JFrame {
private JPanel display;
private ActionListener visualizza() {
ActionListener evento = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
display.removeAll();
Thread t = new Thread(new Runnable() {
public void run() {
JPanel visualizza = new JPanel();
visualizza.add(new JLabel("Test", SwingConstants.CENTER));
display.add(visualizza, BorderLayout.SOUTH);
updateProgress(visualizza);
}
}
);
t.start();
}
};
return evento;
}
private void updateProgress(final JPanel visualizza) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
display.add(visualizza, BorderLayout.SOUTH);
}
});
}}
我不明白为什么代码不能正常工作,线程 t 和 updateProgress 中的线程工作正常,但是任何对显示的修改都不会影响 GUI,即使使用了 invokeLater。
display.add(visualizza, BorderLayout.SOUTH)
这段代码没有修改gui,我知道这是正常的(由于Swing),但是为什么invokeLater不起作用。
对不起,我的英语不好,提前感谢您的回复。
【问题讨论】:
标签: java multithreading swing user-interface invokelater