`
royzhou1985
  • 浏览: 254459 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

SWT 定时器 update UI

    博客分类:
  • Java
阅读更多
SWT如果涉及到线程中的数据互访,在一个线程中的触发事性中再去访问另一个线程的数据,会报Invalid thread access的错误。

用SWT提供的display.asyncExec方法,SWT不是另开一个线程,只是把调用了run方法一次,所以当我们调用Thread.sleep或者后台程序运行时间比较久时程序就会死掉,即无响应。

使用定时器(线程实现)可以很好的解决UI update时候死掉的现象。 定时的通过外部发消息然后再去update UI.

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

public class Main {
	public static int counter;

	public static void main(String[] args) {
		final Display display = new Display();
		final Shell shell = new Shell();
		shell.setLayout(new FillLayout());
		shell.setText("Counter");
		
		final Table table = new Main().createTable(shell);
		
		shell.open();
		Thread MyThread = new Thread() {
			public void run() {
				while (true) {
					try {
						Thread.sleep(2000);
					} catch (InterruptedException e) {
						return;
					}
					display.asyncExec(new CMD(table));
				}
			}
		};
		MyThread.start();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		MyThread.interrupt();
	}
	
	public Table createTable(final Shell shell) {
		Table table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);
		table.setHeaderVisible(true);
		table.setLinesVisible(true);
		table.setBounds(40, 30, 723, 290);

		TableColumn tc1 = new TableColumn(table, SWT.LEFT);
		tc1.setText("Column1");
		tc1.setWidth(50);

		TableColumn tc2 = new TableColumn(table, SWT.LEFT);
		tc2.setText("Column2");
		tc2.setWidth(200);

		TableColumn tc3 = new TableColumn(table, SWT.LEFT);
		tc3.setText("Column3");
		tc3.setWidth(400);
		
		for(int i=0; i<10; i++) {
			TableItem ti = new TableItem(table, SWT.BORDER);
			ti.setText(new String[] {(i+1)+"","Column2:value" + (i+1),"Column3:value" + (i+1)});
		}
		return table;
	}
}

class CMD implements Runnable {
	private Table table;
	
	public CMD(Table table) {
		this.table = table;
	}

	public void run() {
		if(Main.counter<table.getItems().length) {
			TableItem ti = table.getItem(Main.counter++);
			ti.setText(new String[] {ti.getText(0), "updated " + ti.getText(1), "updated " + ti.getText(2)});
		}
	}
}

分享到:
评论

相关推荐

    java swt jface 自定义UI主题 / GUI界面

    标题中的“java swt jface 自定义UI主题 / GUI界面”指的是使用这两个库来创建具有个性化外观和感觉的用户界面。自定义UI主题通常是通过改变控件的颜色、字体、布局以及其他视觉元素来实现的,从而让应用看起来更...

    kettle-ui-swt-7.1.0.0-12.jar

    kettle-ui-swt-7.1.0.0-12.jar 可修改包中资源 核心jar包

    JFace_SWT_win32.x86_64_3.106.2.v20171129-0543.jar(修正版)

    JFace是建立在SWT之上的UI部件,是Eclipse组织为了开发Eclipse IDE环境所编写的一组底层图形界面 API,其底层实现为SWT。它扩展了 SWT并能与 SWT 交互操作。JFace工具箱提供了一组功能强大的用户界面组件,开发人员...

    swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位

    标题“swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位”表明这个压缩包包含了适用于64位Windows操作系统的SWT库。描述中提到的“64位windows操作系统使用的SWT库”进一步确认了这一点。 SWT的设计目标是...

    swt 学习资料02

    - **优点**:相比Java的`java.util.Timer`,SWT的定时器在UI线程中运行,更适应于更新界面元素。 2. **键盘事件(Keyboard Events)**: - **事件监听**:SWT提供了键盘事件监听,如`KeyListener`接口,可以处理`...

    SWT可视化插件

    SWT(Standard Widget Toolkit)是Java中用于创建桌面应用程序的一种图形用户界面(GUI)库,它是Eclipse项目的一部分。SWT的设计目标是提供一个高效、本地化的GUI工具包,能够利用操作系统提供的原生控件,从而让...

    Java swt 64位 开发集合jar包

    6. `org.eclipse.jface_3.11.0.v20150602-1400.jar`:Eclipse JFace库,它是SWT的上层抽象,提供了一些高级UI组件和服务,如对话框、表视图等,简化了UI开发。 7. `org.eclipse.jface.text_3.10.0.v20150603-1752....

    SWT源码 swt.jar

    SWT(Standard Widget Toolkit)是Eclipse项目的一个重要组成部分,它提供了一套用于构建图形用户界面(GUI)的API,与Java Swing不同,SWT基于操作系统原生的UI组件,因此能够实现更好的性能和与操作系统的集成。...

    JFace_SWT_win32.x86_64_3.106.2.v20171129-0543.jar

    JFace是建立在SWT之上的UI部件,是Eclipse组织为了开发Eclipse IDE环境所编写的一组底层图形界面 API,其底层实现为SWT。它扩展了 SWT并能与 SWT 交互操作。JFace工具箱提供了一组功能强大的用户界面组件,开发人员...

    定时器 timer

    在描述中提到的定时器功能可能就是通过SWT的控件实现的,比如使用定时器来更新GUI的状态或触发某些交互。 【视频】和【控件】标签暗示了这个软件可能涉及到视频播放的功能。在Java中,可以使用第三方库如JMF(Java ...

    java SWT框架代码示例

    本压缩包包含的“swtjface”文件可能是一个示例项目,用于展示如何使用SWT和JFace(一个基于SWT的高级UI组件库)进行开发。 SWT的主要优点包括: 1. **性能**:SWT直接调用操作系统提供的API,避免了Java虚拟机的...

    org.eclipse.swt相关所有jar包,

    【标题】"org.eclipse.swt相关所有jar包"涵盖了用于JAVA应用程序与浏览器集成的关键库 ...这其中包括了创建原生UI、嵌入浏览器功能、以及通过`Browser`类进行复杂的Web交互,极大地扩展了Java桌面应用的可能性。

    各ui框架下的Java浏览器(包含swt的浏览器,javafx的浏览器,swing的浏览器),支持Flash

    Java自制浏览器,支持Flash,各个版本的ui框架都有,具备所有IE内核具备的功能,拓展功能比如F5,比如前进后退,比如查看源代码,键盘监听和鼠标右键菜单可自行扩展。里面包含javafx的,swing的,swt三个版本的java...

    swt教程 有关SWT怎么应用

    SWT Designer是一个可视化的工具,可以帮助开发者更直观地设计和构建SWT界面,它简化了UI设计过程,使得开发者无需手动编写大量布局和组件代码。 总的来说,SWT是Java GUI开发的一个强大工具,结合JFace,可以构建...

    SWT-Designer

    6. **兼容性**:SWT-Designer不仅适用于SWT,还可以与JFace库结合,提供更高级的UI组件和功能。 7. **插件扩展**:作为Eclipse插件,SWT-Designer可以与其他Eclipse插件无缝集成,例如Mylyn任务管理或PDE插件开发...

    swt 多线程

    本文将深入探讨SWT中多线程的使用,特别是与UI交互相关的多线程原理。 首先,我们需要理解UI线程,也称为事件调度线程或AWT/SWT线程,它负责处理所有的用户界面更新和事件处理。在SWT中,所有的GUI操作必须在UI线程...

    Eclipse SWT 4.4 API 文档

    对于需要访问系统资源的开发者,SWT提供了诸如文件对话框、系统剪贴板、定时器和线程服务等实用工具。 SWT的一个重要特性是其可扩展性,它支持自定义控件的创建。开发者可以通过继承现有的SWT类并覆盖方法来实现...

    java SWT教程

    SWT提供了各种基本的UI组件,如按钮、文本框、列表等。 【JFace简介】 JFace是建立在SWT之上的高级用户界面框架,它简化了UI开发过程,使得程序员可以更加专注于业务逻辑而不是界面细节。JFace提供了数据绑定、...

    SWT配置 SWT配置 SWT配置 SWT配置 SWT配置

    ### SWT配置详解 #### 一、SWT简介与配置的重要性 SWT(Standard Widget Toolkit)是一种用于构建基于Java的应用程序的图形用户界面工具包。它提供了丰富的控件集,并能够生成本地外观和感觉的界面,这使得应用在...

Global site tag (gtag.js) - Google Analytics