java SwingWorker.doInBackground() 不得访问 GUI 元素

2024-01-17

也许这很微不足道,我正在努力理解一个简单的文档摇摆工人 http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html.

这是复制粘贴的内容

Workflow

SwingWorker 的生命周期涉及三个线程:

当前线程:在此线程上调用execute()方法。它 安排 SwingWorker 在工作线程上执行并返回 立即地。我们可以等待 SwingWorker 完成使用 获取方法。

工作线程:在此线程上调用 doInBackground() 方法。 这是所有后台活动应该发生的地方。通知 关于绑定属性更改的 PropertyChangeListeners 使用 firePropertyChange 和 getPropertyChangeSupport() 方法。默认情况下 有两个可用的绑定属性:状态和进度。

事件派发线程:所有与 Swing 相关的活动都在此发生 线。 SwingWorker 调用 process 和 did() 方法并 通知该线程上的任何 PropertyChangeListener。

通常,当前线程是事件调度线程。

--

工作线程不是 EDT,因此 doInBackground() 中的代码不得访问 GUI 元素。我的理解正确吗?

背景: 我们有一些使用 SwingWorker 的小代码,但有 doInBackground() 创建 FileChooser 并调用setCurrentDirectory()。我怀疑这导致我的异常几乎与https://bugs.java.com/bugdatabase/view_bug?bug_id=6637181 https://bugs.java.com/bugdatabase/view_bug?bug_id=6637181(11-关闭,不是缺陷)


是的。来自后台线程 - 常规线程和SwingWorker.doInBackground请勿修改UI,以免造成各种麻烦。

相反,将更改包装在Runnable并通过以下方式在 EDT 中执行它们SwingUtilities.invokeAndWait, SwingUtilities.invokeLater或 - 使用时SwingWorker - via publish (from doInBackground)。内process的方法SwingWorker,由 EDT 执行,您可以访问 GUI。

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html

就我个人而言,我发现invokeLater and invokeAndWait在许多情况下更容易使用。 SwingWorker 适合例如进度条。

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

java SwingWorker.doInBackground() 不得访问 GUI 元素 的相关文章

随机推荐

  • MongoDB updateMany,动态过滤字段

    使用 updateMany filter update option 时 如何为每个文档设置动态过滤字段 我有一系列这样的文档 time 1 data time 2 data time 3 data 每个都有一个唯一的时间戳 如果时间戳已经
  • 从另一个Java程序编译并运行Java程序[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 使用 CompileAndRun 类 我现在可以编译并运行我的 HelloWorld 类 现在我想用它来运行一个需要用户输入的程序 这可以是
  • 了解 MongoDB Aggregate 和 GroupBy

    我正在尝试在 MongoDB 中执行查询 首先按 id 进行分组 然后按降序排序 我这里有一个函数式 LINQ 表达式 var list this GetPackages ToList list list OrderByDescending
  • 为什么在使用自定义元素时会出现内部 Dartium 异常?

    我在控制台中看到此错误 Exception InvalidStateError Internal Dartium Exception PolymerDeclaration registerType package polymer src d
  • Maven:附加多个工件

    我有一个 Maven 项目 它使用一些自定义 jar 在任何存储库中都找不到 为了将它们与 Maven 构建一起添加 我在 Maven 中使用 Attach artifact 目标 以下是我的 pom 文件
  • 如何漂亮地打印 Golang 结构? [复制]

    这个问题在这里已经有答案了 我正在解组一个结构 我希望它以格式化的方式打印它 我的代码 https play golang org p D0KwGP6Cxa0 https play golang org p D0KwGP6Cxa0 当前产生
  • 宁静的API服务

    我正在寻找一项服务 可以用来调用基于 Web 的 REST API 基本上我想在 app init 上启动一个服务 然后我希望能够要求该服务请求一个 url 并返回结果 与此同时 我希望能够显示进度窗口或类似的东西 我目前已经创建了一个使用
  • 用酶测试连接的组件

    我正在学习采取本次测试课程 https www udemy com react testing with jest and enzyme 通过设置来测试连接的组件store factory测试助手 创建一个与我们商店的配置相匹配的测试商店
  • 如何向 javascript 类添加回调函数?

    javascript 中的以下代码给了我错误 this callback 不是一个函数 function ajaxRequest var httpObject this open open this callback function fu
  • elasticsearch允许具有不同身体数据的重复ID

    我目前正在尝试将我们的 elasticsearch 数据迁移到 2 0 兼容 即 字段名称中没有点 为从 1 x 升级到 2 x 做准备 我编写了一个程序 它 批量 运行位于单节点集群中的数据 并重命名字段 使用批量 API 重新索引文档
  • 获取 .NET Core JSON Body 作为动态对象

    我的 ASP NET Core 端点接受 JSON 形式作为其输入 并调用需要动态参数的方法 我试图像这样调用该方法 HttpPost public IActionResult InitializeAction FromBody dynam
  • iPad Safari 将鼠标事件映射到图像映射中的触摸事件

    我的网站广泛使用图像地图 这些图像是中世纪手稿的页面 AREA 标签的 mouseOver 事件附加了一个工具提示 它显示了鼠标悬停在其上的行的古代文字的现代印刷转录 我刚刚在苹果商店的 iPad 上查看了我的网站 iPad 在很多方面使用
  • geom_boxplot():强制出现空级别

    我无法找到一种方法来要求 ggplot2 在箱线图中显示空级别 而不用实际缺失值填充我的数据框 这是可重现的代码 fake data dftest lt expand grid time 1 10 measure 1 50 dftest v
  • 如何计算直线和曲线的最近点? ..还是曲线和曲线?

    给定直线和二次贝塞尔曲线的点 如何计算它们的最近点 INRIA 有一篇关于这个问题的科学论文 计算两条贝塞尔曲线之间的最小距离 http hal inria fr inria 00518351 en PDF here http hal in
  • 是什么导致桌面屏蔽图标覆盖在*某些*桌面上

    我有一个 C Builder Delphi 应用程序 它具有作为资源嵌入的以下清单
  • 检测django模型中的HOST域名

    在我的模型中 我想使用我在视图中使用的域名 HOST 由于 请求 对象 在视图中这是可行的 但我该怎么办 这个模型方法 哪些不使用 HttpRequest 对象 现在我在 settings py 中设置一个全局值 HOST 并使用它 但那就
  • 使用 lkJSON 解析 JSON

    我有一个 JSON 文件 需要解析并提取一个值 user pk 25025320 username instagram full name Instagram is private false profile pic url https i
  • 实现时在 typescript 中找不到 OnInit

    我正在使用 loginComponent 开发一个示例项目 当我尝试添加 OnInit 时 我需要在我的类中实现 OnInit 但出现以下错误 ts 找不到 OnInit 这是我的代码 export class loginComponent
  • JSON.Stringify 将引号添加到 ID [重复]

    这个问题已经存在了 我正在使用 JSON stringify 和 JSON parse 根据对在线数据库的更改来编辑我的 JSON 文件 一切正常 除了在数字周围加上引号 这会搞乱 JSON 文件 例如应该是 id 1但它正在打印出来 id
  • java SwingWorker.doInBackground() 不得访问 GUI 元素

    也许这很微不足道 我正在努力理解一个简单的文档摇摆工人 http docs oracle com javase 6 docs api javax swing SwingWorker html 这是复制粘贴的内容 Workflow Swing