我的程序老是报空指针异常
NULLPOINTEXCEPTION
一般来说怎样才能精确定位空指针异常啊!!!
Frame类:
public class ExamFrame extends JFrame {
    
    private void jbInit() throws Exception {
        mainPane = (JPanel) getContentPane();
        mainPane.setLayout(null);
        this.setJMenuBar(jmenu);
        setSize(new Dimension(377, 410));
        setTitle("productinfo");
        jlb_an.setHorizontalAlignment(SwingConstants.RIGHT);
        jlb_an.setText("按");
        jlb_an.setBounds(new Rectangle(23, 19, 21, 22));
        jcomb_selectclass.setBounds(new Rectangle(52, 19, 108, 23));
        jcomb_selectclass.addItem("商品名称");
        jcomb_selectclass.addItem("商品价格");
        jcomb_selectclass.addItem("折扣价");
        jcomb_selectclass.addItem("剩余数量");
        jcomb_sort.setBounds(new Rectangle(186, 19, 61, 22));
        jcomb_sort.addItem("升序");
        jcomb_sort.addItem("降序");
        jbt_select.setBounds(new Rectangle(273, 19, 73, 24));
        jbt_select.setText("查 询");
        jbt_select.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String selectclass = jcomb_selectclass.getSelectedItem().
                                     toString();                String sort = jcomb_sort.getSelectedItem().toString();                info = edao.searchall(selectclass, sort);
                rinfo = (ArrayList) info.get(0);                if (info.isEmpty()) {
                    JOptionPane.showMessageDialog(mainPane, "没有找到", "提示",
                                                  JOptionPane.
                                                  INFORMATION_MESSAGE);
                } else {
                    jbt_shang.setEnabled(false);
                    jtxta_productname.setText(rinfo.get(0).toString());
                    jtxt_price.setText(rinfo.get(1).toString());
                    jtxt_zhekou.setText(rinfo.get(2).toString());
                    jtxt_rest.setText(rinfo.get(3).toString());
                    jtxta_jianjie.setText(rinfo.get(4).toString());
                }
            }
        });
        jtxta_productname.setBorder(BorderFactory.createLineBorder(Color.black));
        jtxta_productname.setBounds(new Rectangle(81, 54, 223, 65));
        jlb_productname.setHorizontalAlignment(SwingConstants.LEFT);
        jlb_productname.setText("商品名称:");
        jlb_productname.setBounds(new Rectangle(19, 54, 57, 24));
        jtxt_price.setEditable(false);
        jtxt_price.setBounds(new Rectangle(81, 133, 223, 23));
        jlb_price.setText("商品价格:");
        jlb_price.setBounds(new Rectangle(19, 133, 63, 22));
        jtxt_zhekou.setEditable(false);
        jtxt_zhekou.setBounds(new Rectangle(81, 163, 223, 24));
        jlb_zhekou.setToolTipText("");
        jlb_zhekou.setText("折  扣  价:");
        jlb_zhekou.setBounds(new Rectangle(19, 163, 63, 26));
        jlb_rest.setText("剩余数量:");
        jlb_rest.setBounds(new Rectangle(19, 197, 63, 28));
        jtxt_rest.setEditable(false);
        jtxt_rest.setBounds(new Rectangle(81, 197, 223, 24));
        jtxta_jianjie.setBorder(BorderFactory.createLineBorder(Color.black));
        jtxta_jianjie.setBounds(new Rectangle(81, 233, 223, 80));
        jlb_jianjie.setText("商品简介:");
        jlb_jianjie.setBounds(new Rectangle(19, 233, 56, 22));
        jlb_yuan1.setText("元");
        jlb_yuan1.setBounds(new Rectangle(312, 133, 36, 24));
        jlb_yuan2.setText("元");
        jlb_yuan2.setBounds(new Rectangle(312, 163, 39, 23));
        jlb_jian.setText("件");
        jlb_jian.setBounds(new Rectangle(312, 197, 38, 27));
        jbt_shang.setBounds(new Rectangle(84, 328, 73, 18));
        jbt_shang.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
        jbt_shang.setText("上一个");
        jbt_shang.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (info.indexOf(rinfo) == 0) {
                    jbt_shang.setEnabled(false);
                } else {
                    jbt_shang.setEnabled(true);                }
            }
        });
        jbt_xia.setBounds(new Rectangle(215, 328, 73, 18));
        jbt_xia.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
        jbt_xia.setText("下一个");
        jbt_xia.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (info.indexOf(rinfo) == (info.size()-1)) {
                    jbt_xia.setEnabled(false);
                } else {
                    jbt_xia.setEnabled(true);                }
            }
        });        jmenu.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 13));
        jMenu1.setFont(new java.awt.Font("宋体", Font.BOLD, 13));
        jMenu1.setHorizontalAlignment(SwingConstants.CENTER);
        jMenu1.setHorizontalTextPosition(SwingConstants.CENTER);
        jMenu1.setText("系 统");
        jmenu_exit.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
        jmenu_exit.setText("退出");
        jmenu_exit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                ExamFrame.this.dispose();
            }
        });
        mainPane.add(jlb_an);
        mainPane.add(jcomb_selectclass);
        mainPane.add(jcomb_sort);
        mainPane.add(jbt_select);
        mainPane.add(jtxta_productname);
        mainPane.add(jlb_productname);
        mainPane.add(jtxt_price);
        mainPane.add(jlb_price);
        mainPane.add(jtxt_zhekou);
        mainPane.add(jlb_zhekou);
        mainPane.add(jtxt_rest);
        mainPane.add(jlb_rest);
        mainPane.add(jtxta_jianjie);
        mainPane.add(jlb_jianjie);
        mainPane.add(jlb_yuan1);
        mainPane.add(jbt_shang);
        mainPane.add(jlb_yuan2);
        mainPane.add(jlb_jian);
        mainPane.add(jbt_xia);
        jmenu.add(jMenu1);
        jMenu1.add(jmenu_exit);
    }    public static void main(String[] args) {
        new ExamFrame();
    }
}
连接数据库类:(sql数据库)
public class ExamDAO {
    private Connection con;
    private PreparedStatement pstat;
    private ResultSet rs;
    public ExamDAO() {
    }    public Vector searchall(String leixing, String sort) {
        Vector v = new Vector();
        String xuanzhe = "";
        String selectsort = "asc";
        if (leixing.equals("商品名称")) {
            xuanzhe = "productname";
        } else if (leixing.equals("商品价格")) {
            xuanzhe = "price";
        } else if (leixing.equals("折扣价")) {
            xuanzhe = "discount";
        } else {
            xuanzhe = "rest";
        }
        if (sort.equals("降序")) {
            selectsort = "desc";
        }
        String sql = "select * from product order by " + xuanzhe + " " +
                     selectsort;
        try {
            pstat = con.prepareStatement(sql);
            rs = pstat.executeQuery();
            while(rs.next()) {
                Vector r = new Vector();
                r.add(rs.getString(2));
                r.add(rs.getDouble(3));
                r.add(rs.getDouble(4));
                r.add(rs.getInt(5));
                r.add(rs.getString(6));
                v.add(r);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            close();
        }        return v;
    }

解决方案 »

  1.   

    上面我把主要部分省掉了,只留下了jbinit()和DAO
      

  2.   

    ide应该提示是哪行出错了
    异常信息?
      

  3.   

    从异常栈可以看到那一行报的NullPointerException,然后根据具体的行号在判断那个变量为空应当不是很难。
      

  4.   

    classcastexception是什么异常啊!
      

  5.   

    下面是jdk手册中写的,看一下jdk的文档就知道了。
    indicate that the code has attempted to cast an object to a subclass of which it is not an instance. For example, the following code generates a ClassCastException: 
         Object x = new Integer(0);
         System.out.println((String)x);