【发布时间】:2013-08-02 23:40:38
【问题描述】:
我正在编写一个 MVP 风格的 Java Swing 应用程序。该模型适用于与此问题无关的不同线程中的各种计算。当这些更新发生时,我调用EventQueue.invokeLater 来更新GUI。这些线程切换调用应该发生在 Presenter 中还是 View 中?
Presenter 的参数:
- 视图应该尽可能的愚蠢
- 如果视图这样做了,理论上视图可以从 EDT 调用
EventQueue.invokeLater,这是浪费工作
视图参数:
- 无需注入依赖项
Executor来对 Presenter 进行单元测试 - 视图负责呈现自身,确保在 EDT 上发生更新是该职责的一部分
我不确定。最佳做法是什么?
【问题讨论】:
-
仅将 invokeLater 用于 Swing 方法,在 Swing API 中实现的真正方法(例如 setText,而不是包含 setText 的整个代码块......),不管它们放在哪里(你的代码),这是您设计的一部分,如果代码可读、良好且结构合理,与 EDT 无关
-
@mKorbel 等一下,从您的回复来看,这听起来像是“只在 EDT 上放置实际的 Swing 调用”,这意味着这个卸载应该清楚地在 View 代码中。 (相对于“没关系”)
标签: java swing mvp event-dispatch-thread