`

Swingworker的使用

    博客分类:
  • Java
阅读更多
Swingworker是一个方便使用线程的工具类,提供了多线程程序的代码框架,基于此包可以方便的写出安全的多线程程序...

Swingworker主要有一下几个方法:

doInBackgrount() 计算返回结果,或者抛出一个异常...此方法是未业务逻辑准备数据的地方
publish(V... chunks) 参数为一个数组,功能是将此数组数据传递到process()方法进行处理,比如可以在doInBackgrount方法中从DB取数据,然后通过publish方法分批将数据传递到process将数据显示到JTable上...
process(List) 方法是处理数据的地方,即传递的数据该如何进行不处理或显示..
setProgress(int) 设置线程外部的JProgress控件值...
基本上通过以上几个方法就可以进行安全的多线程编程了..

例子:
需求:将数据从数据库中取出,然后方法JTable上..
实现:
	class LoadDataTask extends SwingWorker<List<LinkerManVO>, LinkerManVO> {
		
		private String strQueryName;
		
		private long startTime = 0L;
		
		@Override
		protected List<LinkerManVO> doInBackground() throws Exception {
//			showBusyFrame();
			startTime = System.currentTimeMillis();
			GlobalValue.progressBar.setIndeterminate(true);
			List<LinkerManVO> result = null;
			result = getAllLinker(strQueryName);
			for(int i=0;i<result.size();i++) {
				Thread.sleep(00);
				publish(new LinkerManVO[] {result.get(i)});  //将结果推到将界面显示...
			}
			
			return result;
		}
		public LoadDataTask(String strQueryName) {
			this.strQueryName = strQueryName;
		}
		
		@Override
		protected void process(List<LinkerManVO> chunks) {
			LinkManTableModel model = (LinkManTableModel) detailTable.getModel();
			if(chunks != null) {
				for(int i=0;i<chunks.size();i++) {
					model.addRow(chunks.get(i));
				}
			}
			long dt = System.currentTimeMillis() - startTime;
			GlobalValue.stateLabel.setText("耗时: " + dt);
		}
		
		@Override
		protected void done() {
			GlobalValue.stateLabel.setText("查询完毕..");
			GlobalValue.progressBar.setIndeterminate(false);
		}		
	}


Swing组件部分的代码就贴出来了,需要的可以回帖...
分享到:
评论
1 楼 及缘南烗 2010-03-15  
回帖支持

相关推荐

    使用SwingWorker异步加载JTree

    这篇博客“使用SwingWorker异步加载JTree”详细介绍了如何利用SwingWorker来加载大型数据集到JTree组件,避免阻塞UI。 首先,我们需要了解JTree。JTree是Swing中的一个组件,它用来展示树形结构的数据,常用于文件...

    Swing线程的深入理解和SwingWorker基础知识介绍[参照].pdf

    本文将深入了解 Swing 线程的工作机制,并介绍如何使用 SwingWorker 来解决常见的问题。 一、Swing 线程的工作机制 在 Swing 中,所有的 GUI 组件都是在一个单独的线程中执行的,这个线程被称为 Event Dispatch ...

    Swingworker

    swing swingworker wingworker wingworker

    Swing线程的深入理解和SwingWorker基础知识介绍

    在上面的代码中,我们使用SwingWorker来执行lookup()方法,然后使用`invokeLater()`方法将结果返回到Swing线程中处理。这保证了GUI界面不会freeze或卡顿。 Swing线程的深入理解和SwingWorker基础知识是Java程序设计...

    Java表格组件在数据库的应用.zip

    例如,JTable 可以配合 SwingWorker 使用,实现后台加载数据,避免阻塞UI线程。 对于用户交互,表格组件提供了各种事件处理器,如MouseListener和KeyListener,用于响应用户的点击、拖动和键盘操作。这些事件可以...

    swingworker排序

    5. **监听SwingWorker的状态**:你可以使用SwingWorker提供的`addPropertyChangeListener`来监听任务的状态变化,如`state`、`progress`等,以便在UI上显示进度条或通知用户任务状态。 在实际应用中,你可以这样做...

    SWT与SwingWorker的结合

    Swt一般情况不允许在另外一个线程中更新控件内容,此程序使用java swing的SwingWorker对swt的控件进行操作更新。对于喜欢使用SwingWorker更新Swing控件的人来说,也可以使用SwingWorker更新Swt控件

    Java的Swing编程中使用SwingWorker线程模式及顶层容器

    在Swing编程中,正确使用SwingWorker和顶层容器可以创建出高效且响应迅速的GUI应用。开发者应该遵循Swing的线程规则,避免在EDT中执行长时间任务,利用SwingWorker进行异步处理,以确保用户界面的流畅性和稳定性。...

    swing不确定进度条

    可以使用SwingWorker的`done()`方法或`propertyChangeSupport`机制在后台任务完成后更新UI。 3. 虽然不确定进度条没有明确的值,但依然可以设置其样式,如颜色、边框等,以满足界面设计需求。 以上是关于"Swing不...

    ProcessBar 2种经典实现

    标题中的“ProgressBar 2种经典实现”指的是在编程中如何创建和使用进度条控件,通常在用户界面(UI)中显示任务执行的进度。在软件开发中,进度条是提高用户体验的重要元素,因为它可以向用户反馈程序正在执行的...

    互联网程序设计实验二0001.docx

    在实验中,我们成功地使用 SwingWorker,V&gt; 来处理后台线程,并将结果显示在界面上。 六、实验代码: 下面是实验中的部分代码: public class ClientUI extends javax.swing.JFrame { // 获取要发送的消息条数 ...

    An Alternative to SwingWorker.java-开源

    SwingWorker的替代品,用于在Swing中执行异步任务。 我们将SwingWorker.java与Action接口合并,生成AbstractAsynchronousAction.java。 此类的具体扩展可以用来代替任何Action。

    互联网程序设计实验六.doc

    通过这个实验,学生不仅掌握了TCP文件传输的基础,还学习了如何使用SwingWorker进行异步编程,以及如何利用Java的网络API进行端口扫描,这些技能对于进行网络应用程序开发至关重要。同时,实验还强调了Swing界面设计...

    再论JavaSwing线程.pdf

    Java Swing线程是Java GUI应用程序开发中的核心概念,特别是在创建响应迅速...通过使用`SwingUtilities.invokeLater()`和`SwingWorker`等工具,可以有效地管理并发,防止阻塞Swing线程,从而提高应用的性能和用户体验。

    java 进度条的实现

    可以使用SwingWorker或者直接使用ExecutorService来实现。 5. **SwingWorker**:SwingWorker是Swing为多线程设计的类,它可以异步执行任务并在后台线程中更新界面。在doInBackground()方法中执行耗时操作,然后在...

    Swing线程的最后讨论--利用异步模型

    第二篇文章《使用SwingWorker线程》,演示了如何使用SwingWorker线程工具类。它也可以在存档中找到。本文介绍了修订过的SwingWorker类,并演示了和基于模型的组件(model-basedcomponents)如JTable和JTree同时使

    Java Swing 线程 下雪效果

    如果是使用`SwingWorker`,可以使用`done()`方法来处理UI更新,并利用`process()`方法在后台线程和EDT之间传递数据。 5. **用户交互**:根据需求,可能还需要添加控制动画的按钮,比如开始、停止下雪,改变雪花数量...

    Java开发中的线程安全选择与Swing

    Swing组件默认不是线程安全的,因此必须通过`SwingUtilities.invokeLater()`、`SwingUtilities.invokeAndWait()`或使用`SwingWorker`类来确保所有对Swing组件的操作都在事件分发线程中执行。这些技术的应用可以有效...

    Eclipse编写的把网页保存成图片Demo

    在本文中,我们将深入探讨如何使用Eclipse IDE和Java编程语言来实现一个功能,即从网页内容生成图片。这个过程通常被称为网页截图或网页捕获,对于自动化测试、数据分析、内容记录等多种用途都非常有用。我们将重点...

    swing-worker-troubleshooting:回购以解决SwingWorker的问题

    要通过修改代码来使用AnalysisWorker ,看到里面的代码注释SimpleApp的上单击处理程序analyzeButton 。 您只需要注释掉try-catch块并取消注释工作代码即可。 此外,该解决方案还需要: 处理从工作程序内部抛出的...

Global site tag (gtag.js) - Google Analytics