实际上不止 1 个问题。
给定模型 View 和 Controller 。 (我的耦合很多 - View 知道它的 Controller,而 Controller 也知道 View。)
Controller 中的新线程是否可以以基本方式触发 - 使用 new Runnable(){ (...) run(){}}
或者在某些“Swing ”中需要执行方式”,使其正确?也许使用Timer
或invokeLater()
?
第二件事是 - 假设新线程已经启动 - 当它直接在 View 上操作时,设置一些 JTextField
(等等) - 执行诸如 setThatTextFieldWithNewValue(msg)< 之类的方法
由于从需要线程调用而需要同步?如果是这样 - 是否有更好的方法可以减少耦合并减少花时间考虑所需的同步?
最佳答案
有几种方法可以创建、管理和通知 MVC,以便更快地发布 SSCCE 以获得更好的帮助。
Runnable#Thread
是非常舒适、稳定和清晰的方式,但我建议将 Swing GUI 的所有输出包装到invokeLater
中,包括线程安全方法如setText
、append
例如是..正如 Kumar Vivek Mitra (+1) 提到的,有
SwingWorke
r,但需要对Java 基本类
有最深入的了解,存在一些问题>异常回收
how to get exception from SwingWorker关于MVC也许会对你有帮助我的similair question
关于java - 如果 Swing View 是由 Controller 中的新线程设置的,那么它是否需要同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11446263/