3
我已经阅读了关于编程Java Swing时,我们应该将这些组件放入Java事件队列中,因为Java Swing线程不是线程安全的。Java事件队列:如何更新JFrame中的组件
但是,当我使用Event Queue
时,我不知道如何更新组件属性(例如:为标签设置文本或更改内容..)。这里是我的代码:
public class SwingExample {
private JLabel lblLabel;
SwingExample(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
lblLabel = new JLabel("Hello, world!", JLabel.CENTER);
frame.getContentPane().add(lblLabel); // adds to CENTER
frame.setSize(200, 150);
frame.setVisible(true);
}
public void setLabel(){
lblLabel.setText("Bye Bye !!!");
}
public static void main(String[] args) throws Exception
{
SwingExample example = null;
EventQueue.invokeLater(new Runnable()
{
public void run()
{
example = new SwingExample(); // ERROR : Cannot refer to non-final variable inside an inner class defined in different method
}
});
// sometime in the futures, i want to update label, so i will call this method...
example.setLabel();
}
}
我知道,如果我写SwingExample example = new SwingExample();
错误不会再次出现,但如果我使用,我无法处理example.setLabel
后。
请告诉我有关此错误以及如何解决此问题。
谢谢:)
@AndrewThompson'example.setLablel'就是我更新图形用户界面的示例。我必须保存另一个类的SwingExample对象来更新它。 – hqt
我误解了源代码,请忽略我的第一条评论。为了更快提供更好的帮助,请发布[SSCCE](http://sscce.org/)(最佳尝试),并提供两个课程。 –
@AndrewThompson当我添加注释到'example.setLabel'这一行时:实际上,我想在某些情况下在其他类或其他方法的“未来”中设置标签文本。 – hqt