1。JButton bt=new JButton();
 bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
操作序列;
}
});2。JButton bt=new JButton();
  bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
Runnable r=new Runnable(){
public void run(){
操作序列;
}
};
SwingUtilities.invokeLater(r);
}

});
1和2到底有什么不同?我原来以为第2种方法是异步执行,但实际上还是同步执行的,跟第1种执行效果是一样的,我实在不知道第2种方法到底有什么用,什么情况下用第1种方法,什么情况下用第2种方法?请指教啊

解决方案 »

  1.   

    实际上是有区别的,
    1、所说,第二种是异步执行的,这点是肯定的。
    2、Swing有一个自己的线程用来处理GUI,第一种方法其实就是用了这个线程,而第二个方法用的是你自己的线程,只是这个线程的启动的决定权交给了Swing的那个线程。
    3、对于你这个例子,区别不明显是因为你那个“操作序列”不足够耗时。
    4、对于足够耗时的任务,实际上自己写一个线程还不如用1.5就开始有的SwingWork类。
    打完收工。
      

  2.   

    yuanqingfei :
    我用两种方法运行的时候,按妞都是按下去出不来,等执行完毕才出来,都是一样的,为啥?第2种如果是线程,应该按下去就弹出来,他也没有弹出来,直到执行完毕才弹出来的,为啥