我正在以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会引发异常。