不要阻塞GUI
通常我们在教程中看到添加一个按钮事件:
①:
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//处理代码...
}
});
原来我也看过一些处理阻塞的方法:
②:
SwingUtilities.invokelater(new Runnable(){
public void run(){
//处理代码...
}
});
然后将上面的代码添加到①的位置。可能是我理解错了,这个方法感觉
和原来没有太大的差异。
下面是我从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();//开启线程
}
}
}
个人感觉③方法效果显著。记录下来,备忘。