在swing工人propertychange没有被调用

时间:2013-08-04 09:50:23

标签: java swing swingworker propertychangelistener

我有多年来一直使用的代码,今天早上我注意到任务完成时没有调用属性更改。我已经将swing工作者设置为内部类,我在String properyName = evt .....上设置了一个断点,它永远不会达到断点。

void loadData() {
    work2 = new bkgdLoadData();
    work2.addPropertyChangeListener(new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            String propertyName = evt.getPropertyName();
            if( propertyName.equals("state")) {
                SwingWorker.StateValue state = (SwingWorker.StateValue) evt.getNewValue();
                if( state == SwingWorker.StateValue.DONE) {
                    work2 = null;
                }
            }
        }
    });
    work2.execute();
}

您可以看到我在任务完成时将对象work2设置为null,现在它不再被设置为null。在课堂上我添加了一个完成的例程,当doinbackground完成时它会遇到它。令我困惑的是为什么不触发属性更改侦听器。在没有注意的情况下,必须有所改变。

protected class bkgdLoadData extends SwingWorker<Integer, Object> {
    @Override
    protected Integer doInBackground() {
        switch(bkgdMode) {
            case 0:
                doRead();
                break;

            case 1:
                doWrite();
                break;

            case 2:
                runRobot();
                break;
        }
        return 0;
    }

    @Override
    protected void done() {
        int i=0;
        i++;
    }
}

已完成断点,但未传递任何属性更改通知。 (我把完成的例程用于验证摇摆工作者是否知道已完成。)

我查看了文档并且我没有看到我必须手动触发某种属性更改,所以我真的,真的卡住并会欣赏另一双眼睛告诉我我错误的是什么愚蠢的错误

谢谢, 伊兰

1 个答案:

答案 0 :(得分:0)

原来我的Java已损坏。删除JDK 1.6并从存储库重新安装它是不够的。

我在Netbeans中对1.6的链接受到了破坏,我也不得不重新安装Netbeans(在此过程中转到7.3.1)。 Netbeans不会认为存储库JDK 1.6是有效的,所以我不得不去Oracle并获得原始版本。 Netbeans认识到原版,我上面报道的问题不再是问题。

我删除了void done()例程,因为除了放置断点之外没有任何其他目的。这样的代码是可以的。谢谢你的帮助。