我有一个关于使用 SwingUtilities 的 invokeLater 方法的正确做法的问题。
所以首先,我想确认我理解正确。
据我了解,必须在 EDT 上更改 GUI,因为 Swing 组件不是线程安全的。invokeLater 方法将 Runnable 作为参数,并且该 runnable 中包含的任何内容都将在 EDT 上运行。因此,对 Swing 组件的任何调用都被放入一种队列中,在 EDT 上一次执行一个。
有了这个,我的问题是:使用它的好习惯是什么?据我所知,至少有两种方法可以做到:
1) 在main
方法中,将所有代码,例如 GUI 创建、Controller 创建,甚至 Model 创建(假设为 MVC 类型模式),放在由 invokeLater 方法调用的 Runnable 中。当然,这是假设模型中任何长时间运行的任务都将使用 SwingWorker 执行。
2)将GUI创建放在invokeLater中,而将Controller创建和Model创建放在main
方法中。然后,每当您需要从 Controller 访问 Swing 组件时,您可以在 invokeLater 方法中弹出所述代码,将其放置在 EDT 队列中。
这两个中的哪一个被认为是最佳实践或坏实践?如果这两个都不好,那么更好的方法是什么?
任何信息将不胜感激。
谢谢。