Swingworker的使用

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组件部分的代码就贴出来了,需要的可以回帖...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值