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

主持人参数:


观点应该尽可能愚蠢
如果视图执行了该操作,则从理论上讲该视图可以从EDT调用EventQueue.invokeLater,这是浪费的工作


视图参数:


对于单元测试Presenter,不必注入依赖项Executor
视图负责渲染自身,确保在EDT上进行更新是该职责的一部分


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

最佳答案

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

同样,仅供参考,您始终可以调用EventQueue.isDispatchThread()进行检查,然后再调用invokeLater或invokeAndWait。从EDT调用InvokeLater不会造成任何伤害,但是invokeAndWait会引发异常。

10-07 20:02