Swing復習 その(4) 正しいSwingの初期化処理の書き方

By | 2011年6月8日

Swingのプログラムを書くとき、下のように書いても動くのであまり気にしていなかったのだが…

public class Main {
 
    public static void main(String[] args) {
        JFrame frame = new JFrame("This is Swing lesson.");
        frame.setBounds(100, 100, 400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        frame.setVisible(true);
    }
}

本来はGUIの生成はSwingのイベントディスパッチスレッド上で行わなければいけない決まりがある。
そのためには、初期化処理をRunnableの中に書き、SwingUtilities.invokeLater()に渡す必要がある。
そうすることによって初期化処理はSwingのイベントディスパッチスレッド上で実行されるようになる。

これを踏まえると、以下のように書くのが正しい初期化処理の書き方となるようだ。

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {

				JFrame frame = new JFrame("This is Swing lesson.");
		        frame.setBounds(100, 100, 400, 300);
		        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		        frame.setVisible(true);
			}
		});
    }
}

最初の例のように書いても普通に動いてしまうのがややこしいところである。。。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です