写了段代码,编译通过,运行出错说空指针,找了2天了都没有找到这个空指针
下面是错误提示
---------- java ----------
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at StudentContentPanel.<init>(StudentFrame.java:79)
at StudentFrame.<init>(StudentFrame.java:29)
at MainButtonPanel$MakeStudentFrameAction.actionPerformed(MainFrame.java:148)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

解决方案 »

  1.   

    代码如下  import java.util.Vector;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     /*
     * 这是课程信息维护的主界面,包括添加、删除功能。
     * 如果点击添加按钮,会弹出一个新的界面,让用户输入相应的信息。
     * 如果点击删除,会弹出确认对话框,让用户确认删除的信息。
     */
    public class StudentFrame extends JFrame
    {

    private static final int WIDTH = 400;
    private static final int HEIGHT = 300;
    private JComboBox studentIdCombox = new JComboBox();
        private JFrame parFrame;//父窗口

    public StudentFrame (JFrame frame)
    {
        parFrame = frame;
    Container con = getContentPane();

    setSize(WIDTH, HEIGHT);
    setTitle("学生信息");
    setResizable(false);//设置用户不可以改变框架的大小

    StudentContentPanel contentPanel = new StudentContentPanel(studentIdCombox);
    StudentButtonPanel buttonPanel = new StudentButtonPanel(parFrame, this, studentIdCombox);
    con.add(contentPanel, BorderLayout.CENTER);
    con.add(buttonPanel, BorderLayout.SOUTH);
        }
    }class StudentContentPanel extends JPanel
    {
        private JComboBox studentIdCombox;
        private JTextField studentName = new JTextField();
        private JTextField studentSpe = new JTextField();
       // private JTextArea studentId = new JTextArea( );
        
        private Student oneStudent;            
        private String strStudentId;//课程代码
        private String strStudentName;//课程名称
        private String strStudentSpe;//授课教师
       // private String strCourseDes;//课程简述
        
        private OperateStudent operateStudent;
        
        public StudentContentPanel(JComboBox id)
        {
            studentIdCombox = id;
            OperateStudent operateStudent = new OperateStudent();
            StudentStorage store = operateStudent.queryAllStudent();
            Vector vec = store.getStudentVec();
            
            //初始化时,如果数据库中没有相应的记录,相应的组件设置文本内容为空
            if(vec.size() == 0)
            {
                studentName.setText("");
                studentSpe.setText("");
                //courseDesArea.setText("");
            }
            //如果有记录,会根据当前选择的代码号,进行相应组件文本的设置
            else
            {
                for(int i = 0; i < vec.size(); i++)
                {
                    oneStudent = (Student)vec.get(i);
                    String studentId = oneStudent.getStudentID();
                    studentIdCombox.addItem(studentId);
                }
                
                strStudentId = (String)studentIdCombox.getSelectedItem();
                
                //根据课程代码查询数据库相关的信息
                oneStudent = operateStudent.queryOneStudent(strStudentId);
                strStudentName = oneStudent.getStudentName();
                strStudentSpe = oneStudent.getStudentSpecialty();
                //strCourseDes = oneCourse.getCourseDes();
                studentName.setText(strStudentName);
                studentSpe.setText(strStudentSpe);
                //courseDesArea.setText(strCourseDes);            
            }
            //设置所有标签的字体
            Font labelFont = new Font("Dialog",Font.BOLD,14);
            
            // 构造第一个水平箱,并添加组件
            JLabel studentIdLabel = new JLabel("学  号:");
            studentIdLabel.setFont(labelFont);
            studentIdCombox.setPreferredSize(new Dimension(60, 30));
            Box hbox1 = Box.createHorizontalBox();
            hbox1.add(studentIdLabel);
            hbox1.add(Box.createHorizontalStrut(20));
            hbox1.add(studentIdCombox);        // 构造第二个水平箱,并添加组件
            JLabel studentNameLabel = new JLabel("姓  名:");
            studentNameLabel.setFont(labelFont);
            studentName.setEditable(false);
            studentName.setPreferredSize(new Dimension(60, 30));
            Box hbox2 = Box.createHorizontalBox();
            hbox2.add(studentNameLabel);
            hbox2.add(Box.createHorizontalStrut(20));
            hbox2.add(studentName);
            
            // 构造第三个水平箱,并添加组件
            JLabel studentSpeLabel = new JLabel("专  业:");
            studentSpeLabel.setFont(labelFont);
            studentSpe.setEditable(false);
            studentSpe.setPreferredSize(new Dimension(60, 30));
            Box hbox3 = Box.createHorizontalBox();
            hbox3.add(studentSpeLabel);
            hbox3.add(Box.createHorizontalStrut(20));
            hbox3.add(studentSpe);
            
             
            
            // 将四个箱体再添加到一个垂直箱中
            Box vbox = Box.createVerticalBox();
            vbox.add(hbox1);
            vbox.add(hbox2);        
            vbox.add(hbox3);
            
            
            add(vbox);
            
            //为下拉组合框添加事件监听器
            studentIdCombox.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        strStudentId = (String)studentIdCombox.getSelectedItem();
                        oneStudent = new OperateStudent().queryOneStudent(strStudentId);
                        if(oneStudent != null)
                        {
                            strStudentName = oneStudent.getStudentName();
                            strStudentSpe = oneStudent.getStudentSpecialty();
                            //strCourseDes = oneCourse.getCourseDes();
                            
                            studentName.setText(strStudentName);
                            studentSpe.setText(strStudentSpe);
                            //courseDesArea.setText(strCourseDes);
                        }
                        else
                        {
                            studentName.setText("");
                            studentSpe.setText("");
                            //courseDesArea.setText("");
                        }
                    }
                });        
        }
    }class StudentButtonPanel extends JPanel
    {
        private JFrame parFrame;
        private JFrame subFrame;
        private JComboBox studentIdCombox;
       // private JScrollPane gongdong=new JScrollPane(courseIdCombox);
        
        public StudentButtonPanel(JFrame par, JFrame sub, JComboBox id)
        {
            this.parFrame = par;
            this.subFrame = sub;
            this.studentIdCombox = id;
            
            JButton addButton = new JButton("添加学生");
            JButton deleteButton = new JButton("删除学生");       
            JButton exitButton = new JButton("退    出");
            
            this.add(addButton);
            this.add(deleteButton);        
            this.add(exitButton);
            
            //删除课程记录
            deleteButton.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        String strStudentId = (String)studentIdCombox.getSelectedItem();
                        int i = JOptionPane.showConfirmDialog(null,"你确认要删除代码为" + strStudentId + "的学生吗?",
                            "删除课程",JOptionPane.YES_NO_OPTION);
                        if(i == 0)
                        {
                            int cou = new OperateStudent().deleteStudent(strStudentId);
                            if(cou == 1)
                            {
                                System.out.println("删除成功!");
                                studentIdCombox.removeItem(strStudentId);
                            }
                        }                    
                    }
                });
            
            //添加课程记录
            addButton.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        AddStudentFrame frame = new AddStudentFrame(subFrame, studentIdCombox);
                        subFrame.hide();
                        frame.show();
                    }
                });            
            
            //返回父窗口
            exitButton.addActionListener(new ActionListener()
                {                        
             public void actionPerformed(ActionEvent e)
             {
             subFrame.hide();
             parFrame.show();
             }
                });
        }
    }请老紫竹帮我分析一下哪出问题了,谢谢
      

  2.   

    at StudentFrame. <init>(StudentFrame.java:29)
    at MainButtonPanel$MakeStudentFrameAction.actionPerformed(MainFrame.java:148) 
    在这两行之前打印下相关的变量
      

  3.   

    可不可以把相关的类发给偶,不然不怎么好调.
    因为你贴的这个类和其他的类有关
    如果其它类都在,那就是很简单的调试问题了.
    嘿嘿
    如果需要的话:
    发我邮箱[email protected]
      

  4.   

    at StudentContentPanel. <init>(StudentFrame.java:79) StudentFrame 的 79行。我看不出来是哪一行。
     oneStudent = operateStudent.queryOneStudent(strStudentId);也许这个 oneStudent  返回的是 null 吧!