button2的事件中有jList1.setListData(str);操作,它会促发事件去执行void jList1_valueChanged(ListSelectionEvent e) 方法,而在这个方法中第一句:
jList1.getSelectedValue().toString();有问题。
此时并没有选择,你还要toString(),所以抛异常建议编写这个代码时,首先判断jList1.getSelectedValue()!=null
然后再用。

解决方案 »

  1.   

    Button2的问题确实出在这里,那么为什么jList的valuechanged事件会连接两次数据库呢??
    555555555555~~~~~~~~~~
      

  2.   

    还有一次是不是button1的事件里连接的,因为这个事件的处理中设置jlist元素了,又促发了
    valuechanged事件,所以又连接了一次
      

  3.   

    可是我用VECTOR保存JLIST的内容,SETLISTDATA后就和数据库无关了啊
    本来一直都很好的,昨天突然就不正常了
    我试了各种SAMPLES,只要是JLIST的VALUECHANGED事件都会连接数据库两次,真要命
      

  4.   

    建议你再理理思路,我觉得是促发了两次valuechanged事件,
    而不是一次事件连接了两次数据库。
      

  5.   

    我跟踪发现程序运行过程中还触发了firstvaluechanged事件,但是这个又不能改
    郁闷ing...
      

  6.   

    firstvaluechanged..................当然..你这种写法..迟早害得修改..我都不知道你到底..是玩,还是写代码...???别介意!!你设置断点在con = DriverManager.getConnection(sql);F5
    然后跟踪(F8)看看是执行的多少遍..
    告诉我.
      

  7.   

    所以才要理清思路吗,呵呵
    你对list做数据变更都会促发事件的。
    你现在的想法是?
      

  8.   

    要不..如下修改..测试一下:
    private voic conn(){
    String query = "SELECT customName FROM CustomInfo WHERE customID ="+jList1.getSelectedValue().toString();
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        con = DriverManager.getConnection(sql);
        stmt = con.createStatement();
        rs=stmt.executeQuery(query);
        rs.next();
    }这个con.stmt,rs都定义成private String然后:
     void jList1_valueChanged(ListSelectionEvent e) { 
        try{
        this.conn();
        jTextField1.setText(rs.getString("customName"));
        stmt.close();
        con.close();
        }catch(Exception ex){
          System.err.println(ex.getMessage());
        }
      }你看看几次...就可以知道毛病了..
      

  9.   

    to gefy:
    对!  我跟踪了,确实是触发了两次valuechanged,但是不知道为什么
      

  10.   

    你也看看yuebenxian说的吧,
    我觉得是你设计上的问题。