swingWorker是否保证在完成时抛出州财产变更事件?

Jor*_*ley 4 java swing swingworker

我有一个类,它接受一些SwingWorkers并按特定顺序一次运行一个.我用a ReentrantLock来确保一次只运行一个worker.通常情况下,我总是在finally子句中解锁,但我需要它保持锁定,直到工人完成.

        nextWorker.getPropertyChangeSupport().addPropertyChangeListener("state", 
        new PropertyChangeListener()
        {
           @Override
           public void propertyChange(PropertyChangeEvent evt)
           {
              if (evt.getNewValue().equals(SwingWorker.StateValue.DONE))
              {
                 executionLock.unlock();
              }
           }
        });
Run Code Online (Sandbox Code Playgroud)

如果不是这种情况,是否保证调用done()?我宁愿不以这种方式调用解锁,因为它会在某种程度上违反封装.

由于项目的性质,这可能会在代码审查中出现.在这种情况下,拥有可验证的来源会很有帮助.到目前为止,我一直找不到一个.

mKo*_*bel 6

  • 我亲自尝试了一切可能SwingWorker,但总是最终结束我done(),但我认为没有保证实现方法从Future正确结束,仍有这个Bug

  • 不知道关于锁定/解锁另一个线程或进程的代码,但我建议Executor用于多线程,

  • 如何从Task中获取异常SwingWorker

  • 我个人从来没有遇到过不愉快的经历SwingWorker或者有一些不期望的缺乏,但是所有的MultiThreading大师都告诉我们SwingWorker生产代码从来没有,仍然需要使用Runnable#Thread而不是SwingWorker