Swing中的并发-使用SwingWorker线程模式 - 编程入门网
ne方法是可选的。
注意,SwingWorker是一个范型类,有两个参数。第一个类型参数指定doInBackground的返回类型。同时也是get方法的类型,它可以被其他线程调用以获得来自于doInBackground的返回值。第二个类型参数指定中间结果的类型,这个例子没有返回中间结果,所以设为void。 使用get方法,可以使对象imgs的引用(在工作线程中创建)在事件派发线程中得到使用。这样就可以在线程之间共享对象。 实际上有两个方法来得到doInBackground类返回的对象。 [1]调用SwingWorker.get没有参数。如果后台任务没有完成,get方法将阻塞直到它完成。 [2]调用SwingWorker.get带参数指定timeout。如果后台任务没有完成,阻塞直到它完成-除非timeout期满,在这种情况下,get将抛出java.util.concurrent.TimeoutException。 5.具有中间结果的任务 让一个正在工作的后台任务提供中间结果是很有用处的。后台任务可以调用SwingWorker.publish方法来做到这个。这个方法接受许多参数。每个参数必须是由SwingWorker的第二个类型参数指定的一种。 可以覆盖(override)SwingWorker.process来保存由publish方法提供的结果。这个方法是由事件派发线程调用的。来自publish方法的结果集通常是由一个process方法收集的。 我们看一下Filpper.java提供的实例。这个程序通过一个后台任务产生一系列的随机布尔值测试java.util.Random。就好比是一个投硬币试验。为了报告它的结果,后台任务使用了一个对象FlipPair。
heads表示true的结果;total表示总的投掷次数。 后台程序是一个FilpTask的实例: private class FlipTask extends SwingWorker<Void, FlipPair> { 因为任务没有返回一个最终结果,这里不需要指定第一个类型参数是什么,使用Void。在每次“投掷”后任务调用publish: @Override
由于publish时常被调用,许多的FlipPair值将在process方法被事件派发线程调用之前被收集;process仅仅关注每次返回的最后一组值,使用它来更新GUI:
Swing中的并发-使用SwingWorker线程模式(4)时间:2011-03-20 51cto博客 zhangjunhd6.取消后台任务 调用SwingWorker.cancel来取消一个正在执行的后台任务。任务必须与它自己的撤销机制一致。有两个方法来做到这一点: [1]当收到一个interrupt时,将被终止。 [2]调用SwingWorker.isCanceled,如果SwingWorker调用cancel,该方法将返回true。 7.绑定属性和状态方法 SwingWorker支持bound properties,这个在与其他线程通信时很有作用。提供两个绑定属性:progress和state。progress和state可以用于触发在事件派发线程中的事件处理任务。 通过实现一个property change listener,程序可以捕捉到progress,s |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |