Pho*_*ixS 5 java user-interface swing swingworker
我有一个任务,当完成它更新一个摇摆GUI告诉已完成.我看到的是你可以使用done()方法或附加a PropertyChangeListener并监听done状态的变化.
什么是更好的使用,为什么?或者他们是一样的吗?
例如,这个:
public class Foo implements PropertyChangeListener {
    public void propertyChange(PropertyChangeEvent evt) {
        if ("state".equals(evt.getPropertyName())
                && (SwingWorker.StateValue.DONE.equals(evt.getNewValue()))) {
            this.updateTheGuiAndOtherThings();
        }
    }
}
或这个:
public class W extends SwingWorker {
    protected Boolean doInBackground() throws Exception {...}
    protected void done() {
        otherClass.updateTheGuiAndOtherThings();
    }
}
在我的情况下没有必要提高效率,我要求更多正确的代码编写.
在SwingWorker上使用done方法或更改侦听器更好吗?
一般来说,两种方式都是正确和等效的.
但是,使用的主要优点PropertyChangeListener是可以将多个侦听器连接到SwingWorker,这允许您以小代码单元分割任务,而不是只有一个done()代码块.例如,如果您必须更新多个Swing组件并且希望将这些更新紧密地分开,则这非常有用.
此外,使用侦听器可以减少SwingWorker和GUI组件之间的耦合:它不知道后台线程完成后会发生什么,并且没有问题.通过重写done()方法,这将不再是真实的.
一个重要的事情 - 当监听StateValue.DONE或重写done()方法时 - 是调用get()方法以捕获和处理在doInBackground()处理期间可能抛出的任何异常.请参阅与此相关的此问答.
其余的没有重大区别.我只是为了扩展性而与听众一起去.
根据@ mKorbel下面的评论,您可能也想看看这个主题:swingWorker是否保证在完成时抛出状态属性更改事件?甚至recosinder使用SwingWorker.我个人没有遇到任何问题,但了解与此问题的多线程性质相关的可能错误是很好的.
| 归档时间: | 
 | 
| 查看次数: | 1176 次 | 
| 最近记录: |