在视图或演示者中切换到事件调度线程?

时间:2013-08-01 20:56:26

标签: java swing mvp event-dispatch-thread

我正在以MVP风格编写Java Swing应用程序。该模型适用于与此问题无关的不同线程中的各种计算。发生这些更新时,我调用EventQueue.invokeLater来更新GUI。这些线程切换调用是否应发生在Presenter或View?

演示者的论点:

  • 视图应尽量愚蠢
  • 如果视图执行此操作,理论上视图可能会从EDT调用EventQueue.invokeLater,这是浪费的工作

观点的论据:

  • 没有必要为Presenter的单元测试注入Executor依赖项
  • View负责呈现自身,确保EDT上发生的更新是该责任的一部分

我不确定。什么是最佳做法?

1 个答案:

答案 0 :(得分:0)

我对MVP的理解是,您希望您的Presenter通过单独的界面与您的View交谈。有关高级别的解释,请参阅this question。该接口是您调用invokeLater的地方。这将使单元测试更容易编写。

另外,仅供参考,您可以在调用invokeLater或invokeAndWait之前调用EventQueue.isDispatchThread()进行检查。 InvokeLater不会伤害从EDT调用它的任何东西,但是invokeAndWait会抛出异常。