我开始使用 CheckThreadViolationRepaintManager
来检测 EDT 违规。
它提示:
partner = getParameter("partner",generatePartnerSelectionPanel(),Design.partnerSelectionDuration);
因为它不喜欢generatePartnerSelectionPanel()
因为它不喜欢这个方法中的JPanel panel = new JPanel();
。但我无法找出为什么会出现问题。
更详细地说,generatePartnerSelectionPanel()
生成了一个 JPanel(我不是在 EDT 中执行的),然后在 getParameter
中我将 JPanel 添加到主 JFrame我在 EDT 中执行此操作(使用 invokeLater
)。
那么,为什么会有问题呢?
最佳答案
违反 EDT 并不意味着一定确实出了问题,这意味着您尝试在 EDT 以外的线程上执行 GUI 相关操作(某种情况可能 出错)。
创建新的 Swing 组件包含在“做一些与 GUI 相关的事情”中,因此会发出有关违规的警告。
这forum has quite a discussion为什么不建议在其他线程上创建 Swing 组件。
关于java - 为什么会发生 EDT 违规?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2727841/