java.sql.SQLException:结果集关闭后不允许操作prob

java.sql.SQLException:结果集关闭后不允许操作prob,java,sql-server,swing,jdbc,thread-sleep,Java,Sql Server,Swing,Jdbc,Thread Sleep,我尝试运行此代码时出错 我尝试了很多次 我尝试在从daabase读取下一个值之前延迟3秒 我有错误 java.sql.SQLException:结果集关闭后不允许操作 你怎么看这个错误,因为我现在不知道这个错误 这是我的密码,请帮帮我 try { Connection conn = null; Statement st = null; ResultSet rs = null; String dbUrl = "jdbc:mysql:/

我尝试运行此代码时出错

我尝试了很多次 我尝试在从daabase读取下一个值之前延迟3秒 我有错误 java.sql.SQLException:结果集关闭后不允许操作

你怎么看这个错误,因为我现在不知道这个错误

这是我的密码,请帮帮我

try {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        String dbUrl = "jdbc:mysql://*******/jointdb";
        String dbUsr = "****";
        String dbPass = "*****";
        String sql = "select * from eridb";
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection(dbUrl, dbUsr, dbPass);
        st = conn.createStatement();
        rs = st.executeQuery(sql);
        while ( rs.next() ) {
        SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                String value = rs.getString("id");
                jTextArea1.setText(value); 
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (SQLException ex) {
                Logger.getLogger(KK.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
        }
    } catch (Exception e) { }   
    finally{
        try{
           if (rs != null)
             rs.close();
           if (st != null) 
             st.close();
           if (conn != null) 
             conn.close();
        }catch(SQLException e){}
     }

您可以在不同的线程中访问结果集。调用时,原始线程已完成其try块,移动到finally,并关闭结果集。

看起来您的线程在主代码中是一个单独的进程。主代码将与线程并行运行

也许您将创建的线程与主代码连接起来,因此主代码可以等待线程结束,然后再继续关闭结果集。要实现这一点,请尝试为线程提供一个引用,例如thread1,然后在主代码中添加以下语句

thread1.join();
根据定义,SwingUtilities.invokeLater将在处理所有AWT事件后异步运行

因此,最有可能的情况是,在执行SwingUtilities.invokeLater中的可运行代码之前,到达finally块


我认为没有必要异步执行记录处理,我建议您在不将Jtextarea与当前线程分离的情况下读取并填充Jtextarea。

您的意思是,请给我更多提示I am put finally block after first try in SwingUtilities.invokeLater thread I am put finally block after try in SwingUtilities.invokeLater thread我的建议是,您应该将代码移动到新的可运行{}中,并将其移动到try块中,然后删除invokeLater。顺便问一下,有什么特别的理由这样做吗?