java swing 组件显示相关的问题

小白求教,下面这段代码编译运行之后,为什么需要在调整一次窗口大小之后,窗口中的按钮组件才会显示出来?


///////////////////////////////////////////////////////////
// 文件名:
//      JavaApplication2.java
///////////////////////////////////////////////////////////
// 简介:
//      简单的Java程序,通过点击按钮显示或隐藏窗口
///////////////////////////////////////////////////////////

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class JavaApplication2 {

    static JFrame window1 = new JFrame("第一个窗口");
    static JFrame window2 = new JFrame("第二个窗口");

    public static void main(String [] args) {

        Container window1_con = window1.getContentPane();
        window1.setBounds(60,100,300,150);
        window1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window1.setVisible(true);

        Container window2_con = window2.getContentPane();
        window2.setBounds(260,100,300,150);
        window2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        window2.setVisible(false);

        JButton btn1 = new JButton("打开第二个窗口");
        window1_con.add(btn1);
        // window1.pack();

        JButton btn2 = new JButton("关闭此窗口");
        window2_con.add(btn2);
        // window2.pack();

        ActionListener listener1;
        listener1 = new ReaderListen1();
        btn1.addActionListener(listener1);

        ActionListener listener2;
        listener2 = new ReaderListen2();
        btn2.addActionListener(listener2);

    }

}

class ReaderListen1 extends JavaApplication2 implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        window2.setVisible(true);
    }

}

class ReaderListen2 extends JavaApplication2 implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        window2.setVisible(false);
    }

}