public class DayReport implements JFrame                                                    
{                                                                                           
 JFrame jf;                                                                                 
 JPanel jp1,jp2;                                                                            
 JButton jbok;                                                                              
 JTextArea jta;                                                                             
 JScrollPane scroll;                                                                        
 public DayReport(){…………构造方法,中间只有一个按钮,一个JTextArea文本域用来显示循环内容.按下按钮执行方法dowork()}
 public dowork()                                                                            
 {                                                                                          
   Connection conn=conOracle();                                                             
   try{                                                                                     
        Statement stmt=conn.createStatement();                                              
        ResultSet rs=stmt.executeQuery("select * from e");                                  
        while(rs.next())                                                                    
        {                                                                                   
          //相关一些操作                                                                    
          jta.append("操作执行成功"+"\r\n");                                                
        }                                                                                   
                                                                                            
      }                                                                                     
   catch(Exception e){e.printStackTrace();}                                                 
 }                                                                                           
 public conOracle(){连接数据库的方法}
  public static void main(String[] args)
{
new DayReport();
}                                                       
}   运行的时候很正常,最后的结果也可以出来,就是在点击确定按钮时,JFrame 就像死了一样,等循环结束后,jta才显示出来结果,但是执行过程中确不能显示,请问是为什么?有人能回答么?谢谢了

解决方案 »

  1.   

    dowork()应该是在按钮的ActionListener里的actionPerformed()方法中调用的吧?
    如果是这样的话,是因为监听器内的代码是在事件派发线程中做的,而数据库的读取属于耗时操作,Swing是单线程的,所有界面绘制相关操作都在事件派发线程中处理,当把数据库读取这样的操作放到事件派发线程时,就会阻碍事件派发线程的分发,也就是说在数据库的查询完成前,Swing是不会进行界面绘制相关的操作的,所以界面像是gei屁了一样~~
      

  2.   

    dowork()应该是在按钮的ActionListener里的actionPerformed()方法中调用的吧? 是的,是在里面调用的,执行是没有问题的。本来是看着DOS窗口界面感觉不爽,加个界面来显示每步执行的结果,可是不能适时刷新,就如上楼老兄说的一样,有什么解决方法没有,让界面绘制可以适时地刷新,可不可以用线程的方法处理?有人回答么?
      

  3.   

    问题解决了,我把dowork()单独用一个线程来执行,什么问题也没有了,终于体会到多线程的好处了:)谢谢daimojingdeyu ,结贴给分