代码的查询功能怎么不得行

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calender3 extends JFrame {
private JButton search = new JButton("查询");
private JButton year = new JButton("年");
private JButton month = new JButton("月");
JLabel[] labelday = new JLabel[42];
private JTextField jbfyear = new JTextField();
private JTextField jbfmonth = new JTextField();

public Calender3() {
    JPanel p2 = new JPanel(new GridLayout(0, 5));
    p2.add(search);
    p2.add(jbfyear);
    p2.add(year);
    p2.add(jbfmonth);
    p2.add(month);

    add(p2, BorderLayout.NORTH);

    JPanel p1 = new JPanel(new GridLayout(0, 7));
    p1.add(new JLabel("日"));
    p1.add(new JLabel("一"));
    p1.add(new JLabel("二"));
    p1.add(new JLabel("三"));
    p1.add(new JLabel("四"));
    p1.add(new JLabel("五"));
    p1.add(new JLabel("六"));
    add(p1, BorderLayout.SOUTH);

    search.addActionListener(new chazhaoListener());

    GregorianCalendar g = new GregorianCalendar();
    int y = g.get(Calendar.YEAR);
    int m = g.get(Calendar.DAY_OF_MONTH);
    p2.add(new JLabel(y + "年" + (m + 1) + "月", JLabel.CENTER),
            BorderLayout.CENTER);
    GregorianCalendar g1 = new GregorianCalendar(y, m, 1);

    for (int j = 1; j < g1.get(Calendar.DAY_OF_WEEK); ++j) {
        labelday[j - 1] = new JLabel("");
        p1.add(labelday[j - 1]);
    }
    for (int j = 1; j <= 31; ++j) {
        int d = g1.get(Calendar.DAY_OF_MONTH);
        labelday[j - 1] = new JLabel(d + "");
        p1.add(labelday[j - 1]);

        g1.add(Calendar.DAY_OF_WEEK, 1);
    }

}

class chazhaoListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == search) {

            int y = Integer.parseInt(jbfyear.getText());
            int m = Integer.parseInt(jbfmonth.getText());

            GregorianCalendar g2 = new GregorianCalendar(y, m - 1, 1);

            for (int j = 1; j < g2.get(Calendar.DAY_OF_WEEK); ++j) {
                labelday[j - 1].setText(" ");

            }
            for (int j = 1; j <= 31; ++j) {
                int d = g2.get(Calendar.DAY_OF_MONTH);
                labelday[j - 1].setText(d + "");
                g2.add(Calendar.DAY_OF_WEEK, 1);
            }

        }

    }
}


public static void main(String[] args) {
    Calender3 frame = new Calender3();
    frame.setTitle("Calender");
    frame.setSize(800, 400);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

}

需要把chazhaoListener定义在Calender3里面,否则search为null