Swing 多线程 解决界面blocking

不要阻塞GUI
通常我们在教程中看到添加一个按钮事件:
①:
button.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent e){
  
  //处理代码...
  
 }
});

原来我也看过一些处理阻塞的方法:
②:
SwingUtilities.invokelater(new Runnable(){
 public void run(){
  //处理代码...
 }
});
然后将上面的代码添加到①的位置。可能是我理解错了,这个方法感觉
和原来没有太大的差异。

2012-5-2编辑

后来学习多线程知道里invokeLater方法只是把run方法的代码放在事件分发线程中,者应同样会阻塞画面,正确的做法是再run方法中将耗时的逻辑新开一个线程处理,即方法③。

2012-5-2编辑完毕

下面是我从Swing hecks 这本书上学到的方法:
③:
Thread buttonThread; //全局变量。

//添加事件监听
button.addActionListener(new MyAction());

//编写内部类
class MyAction extends AbstractAction implements Runnable{
 ActionEvent ev;
 public void run(){
  //事件处理代码
  //...

  buttonThread = null; //运行结束,释放资源

 }
 public void actionPerformed(ActionEvent e){
  ev = e; //传入事件

  //激活线程
  if(null != buttonThread){
   return;
  }else{
   buttonThread = new Thread(this);
   buttonThread.start();//开启线程
  }
 }
}

个人感觉③方法效果显著。记录下来,备忘。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值