`

SWT笔记2——测试UI线程的事件处理

 
阅读更多



import org.eclipse.swt.widgets.Display;


public class TestEventQueue {
	public static void main(String[] args) {
		final Display display = Display.getDefault();
		Shell shell = new Shell();
		shell.setSize(450, 300);
		shell.setText("测试事件循环");
		
		//直接处理,阻塞UI线程
		final Button btnBlock = new Button(shell, SWT.NONE);
		btnBlock.setToolTipText("直接处理事件,费时的操作会阻塞UI线程");
		btnBlock.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				btnBlock.setText("按下按钮后的文字");
			}
		});
		btnBlock.setBounds(10, 10, 107, 27);
		btnBlock.setText("\u963B\u585EUI\u7EBF\u7A0B");
		
		//新线程中处理费事的操作,再用display.syncExec()函数提交改变UI的操作,该操作会阻塞UI线程,但改变外观时间很短,忽略不计;不阻塞用display.asyncExec().
		final Button btnUnblock = new Button(shell, SWT.NONE);
		btnUnblock.setToolTipText("新线程中处理费事的操作,再用display.syncExec()函数提交改变UI的操作,该操作会阻塞UI线程,但改变外观时间很短,忽略不计;不阻塞用display.asyncExec()");
		btnUnblock.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				new Thread(new Runnable() {
					
					@Override
					public void run() {
						try {
							Thread.sleep(5000);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						display.syncExec(new Runnable() {
							@Override
							public void run() {
								btnUnblock.setText("按下按钮后的文字");
								
							}
						});
						
					}
				}).start();
				
			}
		});
		btnUnblock.setBounds(192, 10, 118, 27);
		btnUnblock.setText("\u4E0D\u963B\u585EUI\u7EBF\u7A0B");

		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

}

  • 大小: 25.8 KB
分享到:
评论

相关推荐

    SWT并发例子(后台耗时线程)

    在这个并发例子中,我们关注的是如何在SWT应用中正确处理耗时的后台任务,以避免阻塞用户界面(UI)线程,即事件调度线程。 首先,了解Java中的线程模型至关重要。Java应用程序通常由主线程运行,这个主线程负责...

    swt 多线程

    首先,我们需要理解UI线程,也称为事件调度线程或AWT/SWT线程,它负责处理所有的用户界面更新和事件处理。在SWT中,所有的GUI操作必须在UI线程中进行,以避免界面出现闪烁、滞后或不一致的状态。因此,当我们需要在...

    SWT的自动化测试框架

    2. **平台无关性**:由于SWT本身是跨平台的,SWTBot也继承了这一特性,可以在多种操作系统上运行测试,包括Windows、Linux和macOS。 3. **事件模拟**:SWTBot能够模拟各种用户事件,如键盘输入、鼠标点击、窗口操作...

    swt线程冲突与解决

    SWT库设计之初就考虑到了性能和资源管理的问题,因此它采用了单线程模型来处理所有与UI相关的事件。这意味着所有对SWT组件的操作(包括创建、更新或销毁)都必须在UI主线程中执行。当开发者尝试在非UI主线程中直接...

    SWT_AWT_Swing事件处理机制

    在源码层面,理解AWT、Swing和SWT的事件处理机制有助于优化性能和实现复杂的功能。例如,深入研究事件调度线程,可以避免阻塞UI线程,提升用户体验。同时,了解这些库如何与操作系统交互,能帮助我们更好地设计和...

    SWT JFace 按键、事件、监听

    通过以上介绍,我们可以看出SWT为开发者提供了一套全面的键盘和鼠标事件处理机制,这对于构建功能丰富且用户体验良好的应用程序来说是非常重要的。开发者可以根据不同的需求选择合适的事件监听器,以实现所需的功能...

    局域网聊天 SWT Java 多线程问题已经解决

    4. **UI更新**:在UI线程中进行界面更新,防止界面冻结。 5. **性能优化**:合理使用线程池,减少系统资源消耗。 通过上述讲解,你应该对如何利用SWT和Java解决局域网聊天应用的多线程问题有了深入了解。实践中,...

    abbot eclipse plugin测试 swt测试

    2. **Eclipse插件支持**:Abbot不仅适用于Swing应用,还特别针对Eclipse插件进行了优化,可以无缝集成到Eclipse开发环境中,进行插件的UI测试。 3. **三个包**:Abbot库由三个主要部分组成: - **abbot**:这是...

    swt form

    通常,这样的内容会涵盖如何创建、布局、事件处理以及自定义SWT Form组件等方面的知识。 在标签中,“源码”意味着讨论可能涉及到了SWT库的内部实现,或者提供了使用SWT的代码示例。“工具”可能指的是SWT作为开发...

    swt页面后台多线程接受ModBUS协议Socket通讯的数据

    在IT行业中,SWT(Standard Widget Toolkit)是一种用于构建Java GUI应用程序的库,它提供了与本机操作...开发者需要熟悉Java编程,理解SWT的事件处理机制,掌握ModBUS协议的细节,并具备网络编程和多线程编程的经验。

    swt事件处理的编码实现

    在SWT(Standard Widget Toolkit)中,事件处理是构建用户界面不可或缺的一部分。通过监听和响应各种用户交互,我们可以创建响应式且用户友好的应用程序。在给定的标题和描述中,我们关注的是鼠标的双击事件、键盘...

    swt,jface笔记

    在"swt,jface笔记"这个压缩包中,可能包含了关于这两项技术的学习笔记、示例代码、教程等资料。通过深入学习和实践这些材料,你可以更好地理解和掌握SWT和JFace的使用,从而提高开发Java桌面应用的能力。

    swt资源释放问题

    SWT(Standard Widget Toolkit)是一种基于 Java 的 GUI 工具包,提供了丰富的图形用户界面组件和事件处理机制。但是, SWT 中的资源释放问题是一件棘手的事情。如果不正确地释放资源,可能会导致内存泄露、程序...

    SWT教程java开发文档

    这个“SWT教程”文档应该涵盖了SWT的基础知识、组件使用、事件处理和布局管理等内容,是学习和提升SWT技能的好资料。通过深入学习,开发者可以熟练掌握如何用SWT构建高效、美观的Java桌面应用。

    swt开发的笔记

    【SWT开发笔记】主要涉及的是Java编程领域中的一门重要技术——Standard Widget Toolkit(SWT)。SWT是Eclipse基金会推出的一个开源GUI库,它为Java开发者提供了一种创建本地化用户界面的方式,与Java Swing相比,...

    swt-3.4.2源码测试包下载

    这个"swt-3.4.2源码测试包下载"提供了SWT库的源代码和相关测试资源,对于开发者来说是一个宝贵的资源,可以深入理解其工作原理,进行定制化开发或调试。 首先,`.classpath`文件是Eclipse IDE中的一个重要配置文件...

    学习SWT,RCP的笔记.doc

    JFace是建立在SWT基础上的一套更高层次的UI库,它主要关注于应用程序的高级功能,如视图管理、模型视图控制器(MVC)架构的支持等。通过JFace,开发者可以更容易地构建复杂的用户界面。 ### 四、SWT组件常用方法详解 ...

    SWT JFACE 编程笔记

    SWT JFACE 编程笔记 , 比较适合刚 解除 java swt jface 的开发人员

Global site tag (gtag.js) - Google Analytics