gpt4 book ai didi

Java:无效的线程访问

转载 作者:行者123 更新时间:2023-12-02 07:29:45 26 4
gpt4 key购买 nike

我是java noob程序员,我遇到了SWT异常无效线程访问的问题,我已经寻找过这个问题,我发现当您尝试从不是该线程的界面项目上操作时,就会发生这种情况UI 线程。 但我不知道如何修复它。

问题:我有 4 节课:

  • notify - 创建显示通知的 swt 窗口
  • 主线程 - 从网络下载内容并使用通知类显示通知
  • 窗口 - 它显示托盘图标、设置,它是主类 - 它启动主线程
  • 在第二个 swt 窗口中显示通知的类。

问题是它因无效的线程访问而崩溃。我不知道如何显示两个 swt 窗口(完全不同的类)

<小时/>

该应用程序下载网页,解析它并获取我想要的信息。然后使用类 notify 显示通知。我添加了类 Window,即 SWT Window,它显示托盘图标,还有一些设置,它也是主类,并且该类运行 ZadaneReader 线程。 第一个问题:我应该以其他方式添加 SWT 窗口(主要目标是:托盘图标和设置)吗?

我的应用程序包含以下类:

  • ZadaneReader - 它下载网页,解析它并使用类Notify,它显示通知
  • Notify - 该类通过两种方式显示通知:a) 使用 exec notify-send (但 Ubuntu 仅以这种方式)和 b) 创建对象 UniNotifyWindow,它是显示通知的第二个 SWT 窗口
  • UniNotifyWindow - 显示自己的通知的 swt 窗口
  • 窗口 - 设置、托盘图标、当前主类启动其线程和 ZadaneReader 线程

目前:当我不使用 UniNotifyWindow 我不使用 Window(使用测试器类启动 Zadane 线程)时,它可以工作。

我想这是个菜鸟问题,我犯了很多错误,但我希望你不要责怪我,但如果你能告诉我我做错了什么,我会很高兴。

来源: https://docs.google.com/open?id=0B5VL4J_7HrgaTkt4a1Q2VVQxZEE

最佳答案

您只能从主(也称为“显示”)线程访问 SWT UI 元素。这意味着您不能像从另一个线程在文本框中设置文本那样进行操作。将工作推送到显示线程的最简单方法是调用

Display.getDefault().asyncExec(...)

请注意,您应该谨慎对待在显示线程中运行的内容 - 长时间运行的任务将使您的 UI 无响应。

关于Java:无效的线程访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com