Java Swingはスレッドセーフではないため、Java Swingをプログラミングするときは、これらのコンポーネントをJavaEventQueueに入れる必要があることを読みました。
しかし、を使用する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
後で処理することはできません。
このエラーとその修正方法について教えてください。
ありがとう :)