为什么 Swing 线程模型被认为是错误的?应该如何理解? [关闭]

2024-03-30

我多次听说 Java Swing 线程模型是错误的。我不完全明白为什么,我知道问题与你可以绘制Drawable来自主 UI 线程以外的另一个线程。我知道有一些实用功能,例如SwingUtilities.invokeAndWait and SwingUtilities.invokeLater让你可以在一个Runnable,依次由事件调度程序线程运行。我想这样可以确保绘画是同步完成的,并且不会使缓冲区处于不一致的状态。

我的问题是:“好的”UI 工具包表现如何?采用了哪些解决方案?


布莱恩·戈茨的Java 并发实践 https://rads.stackoverflow.com/amzn/click/com/0321349601,

9.1 为什么 GUI 是单线程的?:

...过去,GUI 应用程序是单线程和 GUI 事件 从“主事件循环”处理。现代 GUI 框架使用 模型略有不同:他们创建了一个专门的事件 用于处理 GUI 事件的调度线程 (EDT)。单线程图形用户界面 框架并不是 Java 独有的; Qt、NextStep、MacOS 可可、X Windows 和许多其他操作系统也是单线程的。这不是为了 缺乏尝试;已经有很多尝试编写多线程 GUI 框架,但由于种族问题持续存在 条件和僵局,他们最终都到达了 单线程事件队列模型,其中专用线程获取 事件离开队列并将它们分派给应用程序定义的事件 处理程序...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Swing 线程模型被认为是错误的?应该如何理解? [关闭] 的相关文章

随机推荐

  • 如何将对齐按钮添加到 Quill 的工具栏?

    我正在尝试将对齐按钮添加到 Quill 编辑器工具栏 工具栏文档 https quilljs com docs modules toolbar 不是很详细 它展示了如何选择对齐选项 但我想要一组并排的切换按钮 这可能吗 你可以做align
  • 在@SpringBootTest中测试@Async注释的方法

    我有一个服务 SomeService 它有一种方法来执行一些逻辑 Override public CompletableFuture
  • 使用 TFS 标签(例如 SourceSafe 标签)

    我们有一个相当标准的发布程序 使用 Visual Source Safe 在发布之前标记构建 这允许我们在出现任何问题时从该标签中获取数据 并在需要更改时使用它进行分支 我们有几个不同的项目 并且总是使用构建版本号进行标记 例如 V1 0
  • KnockoutJS JQuery 组合框绑定

    我想为淘汰赛制作一个绑定 它使用JQuery 自动完成组合框 http jqueryui com demos autocomplete combobox并允许 2 路绑定 http jsfiddle net rniemeyer PPsRC
  • Redux createStore() 已弃用 - 无法在 Redux 操作中从 getState() 获取状态

    So the createStore Redux 现已弃用 并且configureStore 推荐自 reduxjs 工具包 https redux toolkit js org 我很确定这与无法获得有关userInfo状态使用getSta
  • RxAndroid按钮点击观察者?

    各位程序员大家好 我使用 RxAndroid 在按下按钮时每 3 秒进行一次间隔 API 调用 private final CompositeDisposable disposables new CompositeDisposable Ob
  • Java 中的 XML 语法验证 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在试图弄清楚如何检查 XML 文件的语法 确保所有标签都已关闭 没有随机字符等 此时我关心的是确保文件中没有损坏的 XML文件 我一
  • 以编程方式删除标准 UITableView 中的栏

    有谁知道是否可以在代码中从 UITableView 中删除顶栏 那么在这种情况下 删除 书籍 栏吗 self navigationController setNavigationBarHidden YES
  • Powershell Get-ChildItem -Filter 的操作方式与具有相同值的Where 子句不同

    我的服务器上有一个名为 MyFolder 的文件夹 还有其他文件夹称为 MyFolder 1 MyFolder 2 MyFolder 3 等 如果我运行 gci C Sample Name like MyFolder 我得到预期的输出 Di
  • 可以在透明背景PNG图像上创建CSS阴影吗?

    有人知道是否可以在透明背景 PNG 图像上创建基于 css 的阴影 也许使用 CSS3 jquery 或者最后是服务器端 我想要实现的效果示例 非常确定是否可能它不会跨浏览器 但如果它性能良好 愿意应用吗 请随意添加您的意见 开放技术讨论
  • 在struts 2对话框中显示错误消息?

    我在 Struts 2 中有一个登录表单 其中包含用户名和密码字段 我想要的是当用户提交表单时 如果它不是有效用户 我想在对话框中显示错误消息 而不是在登录表单本身中显示错误消息 struts 2 中是否有可用的标签 或者有 人可以向我指出
  • Play Framework——向类路径添加新目录

    我希望能够有一个单独的目录 可以将代表插件的 jar 文件添加到 Play 2 0 项目中 Jar 文件通常保存在 Play 中的 lib 目录下 我想将我的 jar 放在一个名为 plugins 的目录中 这个问题之前被问过 但建议是只使
  • 在 Java 和 C# 中计算 SHA-1 哈希值

    在 Java 和 C 中计算 SHA 1 哈希值 我正在尝试在 C 应用程序中复制 Java 应用程序的逻辑 其中一部分涉及生成密码的 SHA 1 哈希值 不幸的是我无法从 Java 和 C 获得相同的结果 C Output 64 0a b
  • NotImplementedError:frozendict 不支持“更新” - Odoo v8

    我的 Odoo v8 模块上有以下代码 api multi def button generate wh doc self context self context partner self env res partner res for
  • 使用多个 log4net 文件记录器

    我有文件附加器 FileA FileB 和 FileC 我将 FileA 添加到根元素 因为我希望它成为一个包罗万象的元素 下面将详细介绍 我将 FileB 和 FileC 用于特定消息 并为每个附加程序创建命名记录器 在代码中 我加载用于
  • 为什么使用预编译头(C/C++)?

    为什么要使用预编译头 读了这些回复 我怀疑我对它们所做的事情有点愚蠢 pragma once Defines used for production versions ifndef PRODUCTION define eMsg x x Sh
  • 找不到 microsoft.sqlserver.batchparser.dll

    我编写了一个 asp net Web 应用程序 它使用 SMO 针对 SQL Server 2008 来运行一些数据库脚本 它引用这些程序集 位于 C Program Files Microsoft SQL Server 100 SDK A
  • qt5中MainWindow是用自身初始化的吗?

    我尝试学习 qt 5 但不明白一件事 Qt Creator 默认创建这两个文件 主窗口 h ifndef MAINWINDOW H define MAINWINDOW H include
  • 在 Laravel 迁移中向现有表添加新列

    我想在现有表中添加一些新列users在拉拉维尔 我已经用谷歌搜索了这一点 并在这些搜索之后我已经使用命令创建了迁移php artisan make migration add columns to users add columns to
  • 为什么 Swing 线程模型被认为是错误的?应该如何理解? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我多次听说 Java Swing 线