java - 如果 Swing View 是由 Controller 中的新线程设置的,那么它是否需要同步方法

标签 java swing model-view-controller concurrency

实际上不止 1 个问题。

给定模型 View 和 Controller 。 (我的耦合很多 - View 知道它的 Controller,而 Controller 也知道 View。)

Controller 中的新线程是否可以以基本方式触发 - 使用 new Runnable(){ (...) run(){}} 或者在某些“Swing ”中需要执行方式”,使其正确?也许使用TimerinvokeLater()

第二件事是 - 假设新线程已经启动 - 当它直接在 View 上操作时,设置一些 JTextField (等等) - 执行诸如 setThatTextFieldWithNewValue(msg)< 之类的方法 由于从需要线程调用而需要同步?如果是这样 - 是否有更好的方法可以减少耦合并减少花时间考虑所需的同步?

最佳答案

  1. 有几种方法可以创建、管理和通知 MVC,以便更快地发布 SSCCE 以获得更好的帮助。

  2. Runnable#Thread 是非常舒适、稳定和清晰的方式,但我建议将 Swing GUI 的所有输出包装到 invokeLater 中,包括线程安全方法如 setTextappend 例如是..

  3. 正如 Kumar Vivek Mitra (+1) 提到的,有 SwingWorker,但需要对 Java 基本类有最深入的了解, 存在一些问题>异常回收 how to get exception from SwingWorker

  4. 关于MVC也许会对你有帮助我的similair question

关于java - 如果 Swing View 是由 Controller 中的新线程设置的,那么它是否需要同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11446263/

相关文章:

java - 获取 JToggleButton 的状态

javascript - Angular $http.get 请求未运行成功或错误函数

javascript - UI状态应该存储在模型中还是 Controller 中?

php - Yii - 模型和 Controller 之间的界限 - 什么方法在哪里? MVC原则

java - 如何在 power mock 中为 org.asynchttpclient.AsyncHttpClient 创建模拟对象

java - 如何解决 Maven 中的依赖冲突?

java - 如何删除 JTextField 上的 MouseListener/ActionListener

java - 哪种java布局适合我的布局

java - 编码/解码 Java 方法

java - 作业逻辑错误。奇怪的 if 语句