在窗体的关闭事件里:
class this_InternalFrame_Adaptee extends nternalFrameAdapter{
  myInternalFrame adaptee; //要关闭的窗体
  this_InternalFrame_Adaptee(myInternalFrame adaptee){
    this.adaptee = adaptee;
  }
  public void internalFrameClosing(InternalFrameEvent e) {
    try {
      if (rs != null) {
        rs.close();
      }
      if (stat != null) {
        stat.close();
      }
      if (conn != null) {
        conn.close();
        adaptee.dispose();
      }
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
  } //异常在此抛出 java.sql.SQLException: [Microsoft][SQLServer
                 2000 Driver for JDBC]Object has been closed.
}我的SQL Server 2000已经打上SP4。

解决方案 »

  1.   

    我碰到过
    原因是一个stat你一定是多次使用了把
      

  2.   

    adaptee.dispose()方法里有些什么?从错误的意思上来看,可能有个close的操作重复执行了,猜想在dispose()方法里可能有个操作冲突了。
      

  3.   

    Object has been closed. 
    你两次关闭了CONNECTION了吧~~
      

  4.   

    不是的,我做了试验,把SQL语句写成外健关系的就抛出异常,这样的:
    rs = stat.executeQuery("select cj_plant.id,cj_plant.plant,db_framework.framework"+
                                 " from cj_plant,db_framework where"+
                                 " cj_plant.framework_id = db_framework.id");不带外健关系的就没事,这样:
    rs = stat.executeQuery("select * from userb order by username asc");这是怎么回事呢
      

  5.   

    应该是你关闭了Connection后,又执行了查询语句!
      

  6.   

    你用什么数据库?MSSQL?那你的SQL语句有问题呀
      

  7.   

    select cj_plant.id,cj_plant.plant,db_framework.framework from cj_plant as cinner join db_framework as d on c.framework_id = d.id
      

  8.   

    select (你要字段) from c j_plant as cinner join db_framework as d on c.framework_id = d.id
    上面有错哦
      

  9.   

    不是说了吗,数据库是SQL Server 2000
    我是在窗体上使用了JTable,让它显示数据库中的数据。如果选中一条记录,然后再关闭窗体就不会抛出异常,若对JTable不作任何选择就关闭窗体,就抛出了如题的异常,邪门了,另外一个相同的窗体却没事
      

  10.   

    这个错误时正常的,因为你根本没打开连接(没做查询就没有连接数据库),所以关闭的时候会报错,因为你试图关闭一个没有打开过的连接。如果不想看到这个异常,你把程序改成下面的样子。
    public void internalFrameClosing(InternalFrameEvent e) {
      try {
    if (conn != null && !conn.isClosed()) 
          if (rs != null) {
            rs.close();
          }
          if (stat != null) {
            stat.close();
          }
          if (conn != null) {
            conn.close();
            adaptee.dispose();
          }
        }
    }
      catch (SQLException ex) {
        ex.printStackTrace();
      }
    }
      

  11.   

    在调试的时候rs、stat、conn都正确关闭了,请大家看看抛出异常的位置,并不是被catch捕捉到的,也就是说不是在  catch (SQLException ex) {ex.printStackTrace();} 的位置抛出的异常,是程序把这些都执行完了,到了那个结束时,也就是“}”的位置抛出的异常
      

  12.   

    好几天了,还没有解决,要疯了
    我是自己打造了一个MyJTable,继承了JTable,用到Jtable的地方都是用的这个MyJTable,在另外一个窗体上用就没有任何的问题,我的代码都是一样的,为什么在这个窗体上就有异常呢,别让我跳楼。
      

  13.   

    我用了stmt两次,后来改成一次就OK了!
      

  14.   

    你第一次调用的时候把他关闭了(ps和ct),你试一试不关闭,在最后一次用完后close()