用串口采集数据,然后把数据更新在swt.text上的时候会出错,大概意思是线程越界了。
一下是找到的资料和解决方法:
当你使用SWT创建一个SWT程序时,要考虑的一个重要因素就是所有的窗口小部件是如何与线程交互的。如果你熟悉Swing和AWT编程,那么以下内容会比较熟悉,不过某些重要的差异还是需要注意的。
一个被称为用户界面线程的单一的重要线程负责处理事件,调度它们到合适的窗口小部件,以及进行窗体描绘。没有了它,你的程序将无法做任何事情。你可能认为我们过去说过一些这方面的内容,我们的确曾经说过。
在AWT和Swing中,用户界面线程或事件处理线程对开发者是隐藏的。而在SWT中,创建消息泵的线程就成了用户界面线程。这个设计决定使得要将SWT插件插入Eclipse中变得可能。与Sun的方法背离的另一点是,SWT的设计允许拥有多于一个的事件调度线程。(这个功能极少用到,我们提到它只是为了完整起见。)
主线程就是用户界面线程,所以你不该执行任何复杂的或耗时的任务(如数据库访问)或者其他会阻塞线程的任务。相反的,你应该转到其他线程去执行那些操作。不这么做的话,将会严重影响你的用户界面的响应能力并且会给用户带来不便,这永远不是件好事。与此相关的事实就是,唯一允许调用SWT窗口小部件而不会引发SWTException异常的线程就是用户界面线程。
你也许想知道在你转到的线程完成之后如何更新用户界面。要做到这样,你要使用两个辅助方法,它们是显示类(Display)的一部分:asyncExec()和syncExec()。(Swing用户注意:这些方法和Swing工具包类中的invokeLater()和invokeAndWait()方法同义。并且,是的,如果你觉得Sun的方法的命名更为清晰,我们赞同。)这些方法按以下方式工作:
asyncExec(Runnable)--当你需要更新用户界面但并不关心具体何时更新时使用。记住,使用此方法意味着后台线程和用户界面间的处理不存在任何可保证的关联。
syncExec(Runnable)--当你的背景线程需要先进行用户界面更新才能继续处理时使用。注意,在用户界面更新进行之前,你的背景线程会被阻塞。
这些方法都采取了实现Runnable接口的类。以下代码显示了你一般会如何使用这些方法:
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{
button.setText(new Date().toString());
}
});
asyncExec()方法是显示类的一部分,所以你首先需要取得显示类的当前实例,这样做就避免了在你的整个程序中传递显示类的引用。你将一个实现了Runnable接口的类传递到asyncExec()方法。通常你创建一个匿名类来进行更新,正如前面的例子所示。
分享到:
相关推荐
### SWT线程冲突与解决 在使用SWT(Standard Widget Toolkit)进行图形界面开发时,开发者往往会遇到一个常见的问题——线程冲突。由于SWT组件的设计原则是基于单线程模型,即所有的UI操作必须在UI主线程中执行,...
SWT(Standard Widget Toolkit)是Eclipse项目提供的一种用于创建图形用户界面(GUI)的开源库,它在Java平台上提供了一种与操作系统本地GUI控件紧密集成的方式。在这个并发例子中,我们关注的是如何在SWT应用中正确...
本主题将深入探讨如何利用SWT(Standard Widget Toolkit)和Java来构建一个局域网内的聊天应用,并解决其中涉及的多线程问题。SWT是Eclipse基金会提供的一个开源GUI库,它为Java开发者提供了与操作系统更紧密集成的...
首先,我们需要理解UI线程,也称为事件调度线程或AWT/SWT线程,它负责处理所有的用户界面更新和事件处理。在SWT中,所有的GUI操作必须在UI线程中进行,以避免界面出现闪烁、滞后或不一致的状态。因此,当我们需要在...
在IT行业中,SWT(Standard Widget Toolkit)是一种用于构建Java GUI应用程序的库,它提供了与本机操作系统更紧密集成的用户界面元素。MODBUS协议则是一种广泛应用的工业通信协议,常用于PLC(可编程逻辑控制器)和...
对于SWT,内存泄露往往与控件、图像、线程或事件循环有关。例如,如果一个 SWT 控件没有正确地释放,或者事件监听器未被取消注册,它们都可能导致内存资源持续占用。 **检测内存泄露的工具:** 1. **VisualVM**:这...
需要注意的是,一个线程中不能同时有两个活动的 Display 实例存在,否则程序运行时会抛出一个 SWT 异常。如果需要创建多个同时活动的 Display 实例必须在不同的线程中创建它们,并使用 Display 的 getCurrent 函数...
3. **消息循环**:SWT使用了类似Windows的消息循环机制,而不是Swing中的事件分发线程。通过不断地读取消息并分发处理,维持窗口的响应状态。 ### 结论 SWT作为一款强大的GUI组件库,对于那些希望在Java应用程序中...
- SWT对多线程的支持更好,适合复杂的多线程GUI应用。 - Swing则提供跨平台的一致性,并且拥有丰富的内置组件和事件模型。 3. SWT组件 SWT包括各种常见的GUI组件,如按钮(Button)、文本框(Text)、列表(List...
在多线程方面,SWT提供了一个安全的线程模型,确保所有的UI更新都在主线程(通常称为UI线程或Event Dispatch Thread)中执行。这避免了因多线程操作界面导致的竞态条件和死锁问题。开发者可以通过`Display.syncExec...
这个项目是一个典型的Java GUI应用程序示例,结合了SWT库的使用,多线程编程,以及与操作系统的交互,为用户提供了一种方便的定时关机解决方案。通过研究其源代码,开发者可以学习到如何构建类似的应用,并深入了解...
`SWT线程.pdf`文件可能是详细讲解SWT中线程管理的教程,可以帮助读者深入理解如何在SWT应用中正确处理多线程。 总的来说,SWT是一个强大且灵活的GUI库,对于希望开发高性能、原生感的Java桌面应用的开发者来说,是...
- `Display`:负责管理事件循环和协调UI线程与其他线程间的通信。在多线程环境中,每个线程可以拥有自己的`Display`实例,而`Display.getCurrent()`方法可帮助获取当前活跃的`Display`实例。 - `Shell`:代表操作...
用swt开发多用户聊天程序。SWT/jface等GUI类库开发简易聊天室系统+java多线程。
在编程时,Display 是 SWT 应用程序的入口点,它负责事件循环和线程间的通信。Shell 是 SWT 界面中的窗口对象,可以有多种样式,如普通窗口或对话框。Widgets 是 SWT 中的具体控件,如按钮、文本框等,它们通过 ...
同时,SWT支持线程安全的绘图操作,开发者可以在后台线程中更新界面,提高了应用程序的响应速度。 然而,SWT的缺点也很明显。由于其直接依赖于操作系统,导致跨平台兼容性问题,开发者需要为每个目标平台编写特定的...
Display是整个UI的核心,它管理事件循环,协调UI线程与其他线程间的通信。Shell是应用程序中与操作系统窗口管理器交互的窗口,可以是主窗口(顶级Shell)或对话框(Dialog Shell)。Shell的样式可以通过风格位(style...
SWT提供了与操作系统本机UI组件的直接交互,从而能够创建性能高效、外观与操作系统的原生应用一致的GUI程序。在“swt 监控代码资料”这个主题下,我们可以探讨以下几个核心知识点: 1. SWT基本概念:SWT是一个跨...
它是Eclipse项目的一部分,提供了与操作系统更紧密集成的功能,比如原生对话框、控件和多线程支持。标题提到的是SWT的4.3版本,提供了适用于64位和32位操作系统的jar包。 在Java中,JVM(Java虚拟机)根据安装的...