默认情况下,所有Swing组件都在EDT上运行吗?

游戏迷

我是Java的新手,在阅读了许多有关线程和swing的文章之后,我了解到所有Swing方法的调用都应该在EDT上完成,因为Swing并不是线程安全的。但是,在阅读有关EDT之前,我已经写了几个很长的Swing应用程序。而且我所有的应用程序都运行良好。所以我的问题是我的Swing应用程序默认是在EDT上运行还是在其他线程上运行,我很幸运没有与它们发生任何问题?例如,例如,如果我将JButton添加到JPanel或JFrame,或者仅调用JTextField Field.setText(),这些操作是否默认在EDT上运行?如果答案是否定的,那么我是否必须通过调用显式发送所有Swing组件的方法实现以在EDT上运行SwingUtilities.invokeLater()

谢谢

NESPower手套

我的Swing应用程序默认在EDT上运行的位置,还是在不同的线程上运行,我很幸运没有出现任何问题?

它们主要是在EDT上运行的。Ewing本身所做的所有绘画和更新都在EDT上。您在代码库中专门进行的任何未在EDT上进行的操作都是未在EDT上进行的代码。因此,这些操作将是诸如查询JLabel的文本,设置JLabel的文本或初始化JLabel本身之类的操作。

但是,您在代码库中实现的Swing执行的各种侦听器方法都是在EDT上执行的(只要Swing调用了它,而不是您自己)。因此,在这些方法中,您可以查询/修改Swing组件,但要记住以线程安全的方式正确地传入和传出提供给Swing组件或从Swing组件查询的任何数据。

例如,例如,如果我创建一个JButton并将其添加到JPanel或JFrame,这些操作是默认运行在EDT上还是否运行?

对象的初始化发生在您在其上创建对象的任何线程上,Swing对象的其余修改也是如此(例如将一个组件添加到另一个组件)。我不知道任何Swing组件的公共方法实现包装在它们自己的invokeNow()或invokeLater()调用中,因此最好假定所有操作发生在调用原始方法的任何线程上。

我必须通过调用SwingUtilities.invokeLater()显式发送我的所有Swing组件和方法以在EDT上运行

是的,或者invokeNow()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JSX 可以在没有 Babel 的情况下运行吗?

webpack 可以在没有 nodejs 的情况下运行吗?

在群集的Liferay设置中,所有模块都在所有节点上运行吗?

paintComponent方法内的所有内容都可以在EDT上运行吗?

默认情况下让RStudio在RRO上运行

默认情况下如何使所有TextField变小?

默认情况下忽略所有字段和属性

默认情况下,Stream Chat返回所有频道

JavaScript“ imagepicker”-默认情况下选中的所有元素

发球所有SSH会话输出(默认情况下)

为什么在所有情况下,二进制搜索都在 O(log n) 时间内运行,而不是 Θ(log n) 时间?

Windows 7可以在没有网络的情况下无限运行吗?

Webapp可以在没有部署描述符的情况下运行吗?

Docker应用程序容器可以在没有OS的情况下运行吗

RXJS 可以在(客户端)没有服务器的情况下运行吗?

MAMP可以在没有互联网的情况下运行吗?

Ubuntu可以在没有互联网的情况下运行吗?

默认情况下,所有 Android/iPhone 设备都可以运行任何 Cordova 应用程序吗?

默认情况下,如何在Windows 7中“以管理员身份”运行所有我的Apps?

新安装的 Ubuntu 20.04 LTS 服务器可以在没有 snapd 的情况下运行吗?

如何在没有导出默认值的情况下构建组件导出?

默认情况下,如何使git log show树具有所有参数?

默认情况下,有什么方法可以打开所有逻辑通道吗?

当您运行Jenkins作业时,类路径上(默认情况下)是什么?

PagingData库中默认情况下是否在后台线程上运行PagingData?

默认情况下如何在IntelliJ运行/调试配置上启用“仅单实例”选项?

默认情况下,子窗体是否在主窗体的同一线程上运行?

默认情况下,flask 在特定页面上的 0.0.0.0 上运行

为什么默认情况下每个 SYCL 设备都在单独的上下文中?