Java EDT特定方法和其他材料
我对swing和EDT的理解再次继续 由于EDT是唯一的EDT,我现在想知道哪些方法、构造函数和其他东西应该在EDT中完成。我知道一般规则,几乎所有创建Swing组件或与之交互的代码都必须在事件调度线程上运行,但这是非常一般的。还有人说,任何非线程安全的swing代码都应该在EDT上执行。但我仍然无法区分哪些方法是线程安全的,哪些不是 我的问题是,是否有最终将在EDT上排队的命令列表?(我这么说是因为您不必从EDT调用repaint(),但它将永远在EDT上执行) 如果我知道我的方法将在何处执行(并且通过它我可以估计相对于代码其余部分的时间),我就可以生成更高效、更易于理解的代码 到目前为止,我大部分的EDT工作都是在黑暗中进行的,因此产生了错误的代码,然后,当我弄不明白的时候,通常会让这里的人非常恼火 那么是否有一个列表,也许是Javadocs中我遗漏的东西?可能是一些更具体的规则(例如,如果方法的名称中有一个“e”,则必须在特定的EDT类型上执行)?Java EDT特定方法和其他材料,java,swing,event-dispatch-thread,Java,Swing,Event Dispatch Thread,我对swing和EDT的理解再次继续 由于EDT是唯一的EDT,我现在想知道哪些方法、构造函数和其他东西应该在EDT中完成。我知道一般规则,几乎所有创建Swing组件或与之交互的代码都必须在事件调度线程上运行,但这是非常一般的。还有人说,任何非线程安全的swing代码都应该在EDT上执行。但我仍然无法区分哪些方法是线程安全的,哪些不是 我的问题是,是否有最终将在EDT上排队的命令列表?(我这么说是因为您不必从EDT调用repaint(),但它将永远在EDT上执行) 如果我知道我的方法将在何处执行
- 没有复杂、奇怪或不确定的事情,EDT在所有事件完成之前都是活着的
- 如果EDT中的所有事件都已完成,则SwingUtilities.isEventDispatchThread()将始终返回false
- 请注意,鼠标和按键事件可以向EDT生成新事件(一些JComponents在内部对这些事件作出反应,在API中实现的通知程序向EDT触发新事件,然后EDT处于活动状态,例如容器中的JButton和ButtonModel中的无焦点触发事件,在Java6中有效,在Win7和更新版本中永远不会),不管是否添加了XxxListener,都要测试而不必测试
- invokeLater()在所有情况下都是活动的EDT,不包括使用Thread.sleep(int)进行冻结
- sleep(int)可能导致在sleep()期间丢失所有事件,或者仅在鼠标悬停时刷新Swing GUI
- 在Java7中创建是可能的,但我忽略了这个接口的真正原因,因为所有事件仍然必须在EDT上完成,所以在Java1.4中可以创建与Java7相同的多线程
- 与WinXP for MetalLookAndFeel上的Java6相比,Java7中的一些线程安全方法不是线程安全的