我用SwingWorker来让一段查询数据库的代码用线程运行,但是每次都会出现
java.sql.SQLException: Operation not allowed after ResultSet closed。这是SWINGWORKER的代码
final SwingWorker worker = new SwingWorker(){
      public Object construct() {
       boolean sortByScore = sortScoreButton.isSelected();
       boolean showVerb = showVerbBox.isSelected();
       Set bID = new HashSet();
       bID.add(b.tid + "");
        try{
          PbSentence[] abSen = hiddenLink.getAB(b, As);
  }catch(SQLException e){
          e.printStackTrace();
          setCursor(Cursor.getDefaultCursor());
        }
    
       return null;
      }
      
      public void finished(){
        setCursor(Cursor.getDefaultCursor());
      }
  };
   worker.start();这是查询数据库的代码:
 private PbSentence[] getABC(Link B, String AorC) throws SQLException{
  // final SwingWorker worker = new SwingWorker(){
  //    public Object construct() {
    uniqueSenid.clear();
    retrieved.clear();
    String query = getABC.replaceAll("%%%", AorC) + B.tid;
    ResultSet rs = dbConnector.executeQuery(query);
    while(rs.next()){
      String sid = rs.getString(1);
      long pmid = rs.getInt(2);
      String sen = rs.getString(3);
      if(!uniqueSenid.contains(sid)){
        retrieved.add(new PbSentence(sen, pmid));
        uniqueSenid.add(sid);
      }
    }
    rs.close();
    PbSentence[] sens = new PbSentence[retrieved.size()];
    retrieved.toArray(sens);
    return sens;
  }我能感觉到可能线程让RESULTSET关闭了,可是怎么解决呢

解决方案 »

  1.   

    不知道你的SwingWorker的具体功能。对于非通用的包,应该在提问题时指明出处。我目前只知道J2SE6.0中有SwingWorker,我还没用过,看了一下Spec,感觉你的用法有错误。我看了api上的几个例子,其中
    1)每个例子都会覆盖doInBackground()
    2)其它会被覆盖的方法有
        process()
        done()
    3)运行SwingWorker的方法是execute()另外,我不理解你的代码中construct()方法的意义。如果是javax.swing.SwingWorker,这里的代码不会执行。
      

  2.   

    http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html这是SUN网站上的
    说明,我是按照那个一步一步写的,而且数据库操作也执行了,但是同时也显示了
    这个错误
      

  3.   

    SwingWorker在什么时候执行?
    在哪里抛出违例?
      

  4.   

    SWINGWORKER是当用户按一个按钮的时候执行,错误追踪的 结果是不同的,但都是RESULTSET的操作,比如rs.next(), rs.getInt()之类。