您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java事件调度线程说明

Java事件调度线程说明

该事件调度线程是由AWT管理一个特殊的线程。基本上,它是一个无限循环运行的线程,用于处理事件。

该java.awt.EventQueue.invokelater和javax.swing.SwingUtilities.invokelater方法的方式来提供,这将在事件队列运行代码。编写在多线程环境中安全的UI框架非常困难,因此AWT作者决定仅允许对GUI对象的操作在单个特殊线程上进行。所有事件处理程序都将在此线程上执行,并且修改GUI的所有代码也应在该线程上运行。

现在,AWT通常不会检查您是否不是从另一个线程发出GUI命令(C#的WPF框架会执行此操作),这意味着可以编写很多代码,并且对此非常了解,并且不会遇到任何问题。但这可能导致不确定的行为,因此,最好的办法是始终确保GUI代码在事件分发线程上运行。invokelater提供了执行此操作的机制。

一个经典的例子是您需要运行长时间运行的操作,例如下载文件。因此,您启动了一个线程来执行此操作,然后在完成后使用它invokelater来更新UI。如果不使用invokelater,而是直接更新了UI,则可能会出现竞争状况,并且可能发生未定义的行为。

java 2022/1/1 18:23:19 有521人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶