java - 在 Swing worker 属性(property)变化没有被称为

标签 java swing swingworker propertychangelistener

我有已经使用多年的代码,今天早上我注意到任务完成后没有调用属性更改。我已将 Swing Worker 设置为内部类,并在 String propertyName = 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。在类(class)中,我添加了一个完成例程,当 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++;
    }
}

done 处的断点被击中,但没有传递属性更改通知。 (我放置完成例程的唯一目的是验证 Swing 工作人员是否知道它已完成。)

我查看了文档,我没有看到我必须手动触发某种属性更改,所以我真的非常卡住,并且希望另一双眼睛能告诉我我犯了什么愚蠢的错误.

谢谢, 宜兰

最佳答案

事实证明我的 Java 已损坏。删除 JDK 1.6 并从存储库重新安装它还不够好。

我在 Netbeans 中到 1.6 的链接已损坏,我还必须重新安装 Netbeans(在此过程中转到 7.3.1)。 Netbeans 不会将 JDK 1.6 存储库识别为有效,因此我必须转到 Oracle 并获取原始版本。 Netbeans 识别了原始版本,我上面报告的问题不再是问题。

我删除了 void done() 例程,因为它除了放置断点的地方之外没有任何用途。这样的代码就可以了。感谢您的帮助。

关于java - 在 Swing worker 属性(property)变化没有被称为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18041687/

相关文章:

java - SwingWorker 中的 For 循环

java - 方法和垃圾收集

java - 为什么 JEditorPane 不显示用 HTML 编写的图像?

java - 停止/取消 SwingWorker 线程?

java - 在 Jpanel 上放置组件

java - Swing/Java3D 应用程序中基于状态的撤消 : AOP solution?

java - SwingWorker get()卡住接口(interface)

java - 使用 YourKit 分析应用程序,仍然无法识别 CPU 占用

java - 为什么在下面的阻塞队列示例中调用notify()的顺序很重要?

java - 如果数据源创建失败,如何测试 Spring Boot 是否“不”启动