我写了个更改图书类别的小程序单独测试已经没有问题了,但是集成到图书管理系统上去就出错。import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
class setRight extends JFrame {
   JButton add=new JButton();
   JButton sure=new JButton();
   String kindstream=null;
   JComboBox kindofuser ;
    ResultSet rs =null;
Connection  conn=null;
    Statement   state=null;
   
public setRight(){ Container cc=getContentPane();

 add.setText("增加");
    sure.setText("确定");
JLabel maxbook=new JLabel("最大借阅量");
JLabel maxday=new JLabel("最长借阅时间(天)");
final JTextField maxdayt=new JTextField();
final JTextField maxbookt=new JTextField(); 
JLabel user=new JLabel("用户分类");
    Object  kind[]={"管理员","读者"};
JPanel jp=new JPanel();
this.setTitle("用户权限管理");

           try{    
         String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=libary.mdb";
               Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
              conn = DriverManager.getConnection(url, "", "");
        state = conn.createStatement();
               String sql = "select 用户分类 from userkind ";
              rs=state.executeQuery(sql);
            while(rs.next()){
             kindstream+=rs.getString("用户分类")+",";
               
            }
                } catch (ClassNotFoundException ee) {
ee.printStackTrace();
} catch (SQLException ee) {
ee.printStackTrace();
} finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(state != null) {
state.close();
state = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
 
   
        kind=kindstream.split(",");                               //这句话的错误!
kindofuser=new JComboBox(kind);
    user.setBounds(40,40,100,25);
kindofuser.setBounds(40,70,100,25);
maxday.setBounds(260,40,100,25);
maxdayt.setBounds(260,70,100,25);
maxbook.setBounds(380,40,100,25);
maxbookt.setBounds(380,70,100,25);
sure.setBounds(490,70,60,25);
add.setBounds(165,70,60,25);
jp.setLayout(null);
jp.add(user);
jp.add(kindofuser);
jp.add(maxbook);
jp.add(maxday);
jp.add(maxbookt);
jp.add(maxdayt);
jp.add(add);
jp.add(sure);
        add.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
         kindofuser.setEditable(true);
         }
        });
        sure.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
 try{
   String kindstring=null;
   String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=libary.mdb";
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   Connection conn = DriverManager.getConnection(url, "", "");
   PreparedStatement pstmt=null;
    kindstring=""+kindofuser.getSelectedItem();
    pstmt=conn.prepareStatement("insert into  userkind values(?,?,? )");
    pstmt.setString(1,kindstring);
    System.out.println(kindstring);
    pstmt.setInt(2,4);
    pstmt.setInt(3, 4);
    pstmt.executeUpdate();
    JOptionPane.showMessageDialog(null,"输入成功");
    kindofuser.setEditable(false);
     
   
      }catch(Exception ee){JOptionPane.showMessageDialog(null,"输入失败");  }
         }
        });
cc.add(jp);
this.setSize(600,400);
this.setLocation(200,200);
this.setVisible(true);

}
}
public class test3 extends JFrame {
  public static void main(String s[]){
   new setRight();
  }
}
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at setRight.<init>(setRight.java:44)
    at frame$5.actionPerformed(frame.java:163)
    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.AbstractButton.doClick(AbstractButton.java:357)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1220)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1261)
    at java.awt.Component.processMouseEvent(Component.java:6041)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5806)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4413)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    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:2440)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    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.   

    kindstream这个有可能是nullwhile(rs.next()){//如果结果集为null,下边这句就不执行。为空。null的kindstream的split()方法就会报错
                 kindstream+=rs.getString("用户分类")+",";
                       
                }
      

  2.   

    解决办法是在使用前,判断下是否为空。或while(rs.next()){}if(kindstream==null)kindsream="";这里可以消除null,也许你这个方法里边根本不会运行,最好的解决办法是在必要的使用前进行下判断。