Java:线程访问无效

Java:线程访问无效,java,multithreading,swt,Java,Multithreading,Swt,我是JavaNoob程序员,我遇到了SWT异常无效线程访问的问题,我已经寻找了这个问题,我发现当您尝试从一个非UI线程的线程对一个接口项进行操作时,就会发生这种情况。但我不知道如何修复它 问题: 我有4门课: notify-创建显示notify的swt窗口 主线程-从网上下载内容并使用notify类显示通知 窗口-它显示托盘图标,设置,它是主类-它启动主线程 类,该类在第二个swt窗口中显示通知 问题是它会因无效的线程访问而崩溃。我不知道如何显示两个swt窗口(完全不同的类) 该应用程序下

我是JavaNoob程序员,我遇到了SWT异常无效线程访问的问题,我已经寻找了这个问题,我发现当您尝试从一个非UI线程的线程对一个接口项进行操作时,就会发生这种情况。但我不知道如何修复它

问题: 我有4门课:

  • notify-创建显示notify的swt窗口
  • 主线程-从网上下载内容并使用notify类显示通知
  • 窗口-它显示托盘图标,设置,它是主类-它启动主线程
  • 类,该类在第二个swt窗口中显示通知
问题是它会因无效的线程访问而崩溃。我不知道如何显示两个swt窗口(完全不同的类)


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

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

  • ZadaneReader-它下载网页,解析网页,并使用Notify类显示通知
  • 通知-该类通过两种方式显示通知: a) 使用exec notify send(但它只是Ubuntu的一种方式)和b)创建对象unnotifyWindow,这是显示通知的第二个SWT窗口
  • UnnotifyWindow—显示自己通知的swt窗口
  • 窗口-设置,托盘图标,当前主类它启动其线程和ZadaneReader线程
目前:当我没有使用unnotifyWindow或我没有使用Window时(使用tester类启动Zadane线程),它可以工作

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


来源:

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

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

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

您能提供一个小而清晰的示例吗?你知道诸如事件分派线程和/或[SwingUtilities.invokeLater]()