java笔记--使用SwingWoker类完成耗时操作
使用SwingWoker类完成耗时操作:
对于Swing中的耗时操作,通常要在一个新的线程中运行,以免程序"假死"。
在java6.0中,可以用SwingWoker类来完成
SwingWoker<T,V>是在专用线程中执行长时间GUI交互任务的抽象类。用Swing
编写多线程应用程序时,要记住两个约束条件:
1.不应该在事件指派线程运行耗时任务,否则应用程序将无反应。
2.只能在事件指派线程上访问Swing控件
注: 通常需要将耗时的任务放到SwingWoker类的doInBackground()方法中
执行:
protected abstract T doInBackground()throws Exception
--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3912080.html "谢谢--
代码实例:
package com.xhj.thread; import java.awt.Button;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Random; import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingWorker; /**
* @author XIEHEJUN
*
*/
public class UsedSwingWokerThread extends JFrame {
private Label lable;
private Button button; public Label getLable() {
return lable;
} public void setLable(Label lable) {
this.lable = lable;
} public Button getButton() {
return button;
} public void setButton(Button button) {
this.button = button;
} private class NumberArrary extends SwingWorker<Void, Integer> { @Override
protected Void doInBackground() throws Exception {
button.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
int[] numArrary = new int[1000];
for (int i = 0; i < 1000; i++) {
numArrary[i] = new Random().nextInt();
System.out.println(i + "号数为:" + numArrary[i]);
}
Arrays.sort(numArrary);
System.out.println("生成的最大随机数为:"
+ numArrary[numArrary.length - 1]);
lable.setText("生成的最大随机数为:"
+ numArrary[numArrary.length - 1]);
}
});
return null;
} } /**
* @param args
*/
public static void main(String[] args) {
UsedSwingWokerThread usedSwingWoker = new UsedSwingWokerThread(); JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.setContentPane(panel);
frame.setVisible(true);
usedSwingWoker.setLable(new Label("点击按钮生成随机数组"));
usedSwingWoker.setButton(new Button("开始生成"));
frame.add(usedSwingWoker.getLable());
frame.add(usedSwingWoker.getButton()); NumberArrary arrarys = usedSwingWoker.new NumberArrary();
try {
arrarys.doInBackground();
} catch (Exception e) { e.printStackTrace();
} } }
注:SwingWoker的生命周期与线程
1.当前线程:在该线程上调用execute()方法。它调度SwingWoker以在worker线程上执行并立即返回,
可使用get方法等待SwingWoker完成。
2.Worker线程:在该线程上调用doInBackground()方法。所有后台活动都应该在此线程上发生。
要通知PropertyChangListeners有关绑定(bound)属性的更改,请使用firePropertyChang
和getPropertyChangeSupport()方法、默认情况下,有两个可用的绑定属性,即state和progress
3.事件指派线程:所有与Swing有关的活动都在该线程上发生。SwingWoker调用process和done()方法,
并通知该线程的所有PropertyChangListener。
java笔记--使用SwingWoker类完成耗时操作的更多相关文章
- JAVA笔记10-抽象类
(1)abstrac关键字类修饰的类是抽象类,用abstract修饰的方法是抽象方法: (2)含有抽象方法的类必须被定义为抽象类: (3)抽象类必须被继承,抽象方法必须被重写(或者将子类也声明为抽象类 ...
- Java笔记:String类
1.String类是不可变类,一旦一个String对象被创建以后,包含在这个对象中的字符序列式不可改变的,直至这个对象被销毁. String s1 = "java"; s1 = s ...
- Java笔记(第七篇 JDBC操作数据库)
JDBC是连接数据库和java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.学习java语言,必须学习JDBC技术,因为JDBC技术实在java语言中被广泛使用的一种操作数据库 ...
- Java笔记(十二)……类中各部分加载顺序及存放位置问题
什么时候会加载类 使用到类中的内容时加载,三种情况: 创建对象:new StaticDemo(); 使用类中的静态成员:StaticCode.num = 9; StaticCode.getNum() ...
- Java笔记:枚举类
1.一个类的实例是有限且固定的,这个类称为枚举类.比如季节类,只有四个对象(春.夏.秋.冬) 2.手动实现一个枚举类(1)通过private将构造器隐藏起来(2)把这个类的所有可能实例都使用priva ...
- JAVA笔记__窗体类/Panel类/Toolkit类
/** * 窗体类 */ public class Main { public static void main(String[] args) { MyFrame m1 = new MyFrame() ...
- Java—IO流 File类的常用API
File类 1.只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. package cn.test; import java.io.File; import java.io.IOE ...
- java 学习笔记之 流、文件的操作
ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import ...
- Java Calendar 类的时间操作
Java Calendar 类的时间操作 标签: javaCalendar时间Date 2013-07-30 17:53 140401人阅读 评论(7) 收藏 举报 分类: 所有(165) Java ...
随机推荐
- JQuery上传文件插件Uploadify使用笔记
新工作的第一份任务就是给实现 限制Uploadify 上传文件格式为图片 测试出来报错,选择了非图片文件,提示错误后,再选择其他文件,上传时还是包含了之前清空的非图片文件 最后实现效果的代码是 //上 ...
- WIN8 浏览器排版不兼容问题
经常访问网站失败 访问部分网站只显示白底蓝字没有排版也没有图片 尝试了网上的各种方法,也是用了360和百度安全管家的网页修复 重置了IE设置 都不行!!! 最后有效的方法是 更换DNS 208.67. ...
- unity3d 依赖关系获取预制件任意资源
前段时间策划们想知道UI预制件中使用了哪些音效 N多预制件.N多音效!! 如果纯人工整理的话这还不累成狗? 累成狗不说,还容易出错 所以获取音频剪辑小工具就诞生了,将策划从死亡边缘拉了回来 我们先看一 ...
- 《深入了解 Linq to SQL》之对象的增删改 —— 麦叔叔呕心呖血之作
你的程序里,是否到处充斥着这种代码: db.Customers.InsertOnSubmit(customer); db.SubmitChange(); 如果某一天,因为 Customers 表的数据 ...
- Android--自动搜索提示
一. 效果图 在Google或者百度搜索的时候,在输入关键词都会出现自动搜索的提示内容,类似如下的效果,输入b 则出现包含b的相关词条 二. 布局代码 <?xml version="1 ...
- SDAutolayout图片大小根据数量变化
只需要在自定义的PhotoContainerView中做一下判断就可以了 ) { [self setupAutoWidthFlowItems:[temp copy] withPerRowItemsCo ...
- Day One
站立式会议 站立式会议内容总结 442 今天完成:学习Android 三种常用的adapter的使用方法,实现主页的可折叠列表 遇到问题:在实现自定义Adapter时,调用出现错误.已解决. 明天计划 ...
- jquery事件的区别
1. mouseenter 和 mouseover (mouseleave 和 mouseout) 前者鼠标进入当前元素触发,内部的子元素不会触发事件. 而后者是进入当前元素后,当前元素和内部的子元 ...
- strncmp很好的函数
strcmp比较的是所有的长度,而strncmp可以比较前几个长度 strncmp(s1,s2,n);这样就比较了s1,s2,前n个长度的大小.
- Html-Css-div半透明
源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...