eclipse swing的使用教程详细(swingwork的工作模式)

技术怎么分析SwingWorker与Swing程序这篇文章给大家介绍怎么分析SwingWorker与Swing程序,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。某些人一拍脑袋的事,让我有机会跟Swi

本文介绍了如何分析SwingWorker和Swing程序。内容非常详细。感兴趣的朋友可以参考一下,希望对你有所帮助。

有人拍了一下我的头,这给了我一个和Swing合作的机会,因为项目组没有人用这个东西来修,所以我只好硬着头皮上了!有时候人们不得不有点压力。

发展的第一阶段:

准备阶段:工具选择。用了Netbeans 6后,我试用了一下。我觉得画界面很容易,但是生成的代码很长。起初,我对Swing并不熟悉。看着netbeans生成代码让人头疼。我觉得这不是我想要的,然后我放弃了。然后是VE,因为只是上下颠倒,我没有仔细看。我选择了Jigloo,但是我用了之后才知道他生成的代码不好。

开发阶段:不熟悉摇摆端开发。发生的事情很多,但是因为这个软件的功能比较简单,* * *终于被拿出来了。虽然bug很多,但可以算是我的* * Swing作品,客户觉得效果很不理想(无论是软件设计还是技术应用方面),所以有以下持续开发的体验。

主要的技术问题是线程的误用导致死锁,这通常会导致莫名其妙的feign死亡。

发展的第二阶段:

因为第一阶段的发展比较痛苦,所以决定换一种语言发展。因为RIA最近比较热,adoble在RIA的空气也挺受欢迎的,UI感觉很华丽,我自己也尝试过做一些DEMO。项目中使用的webservice、加解密操作、文件上传下载都有解决方案,但致命的是这个项目要调用外部程序,air在这方面比较脆弱。谷歌有一个as的fscommand来调用其他程序,但是air实际上不支持这个,以后最好用一种实用的方式来SWING。

然后又试了一个VE,感觉现在比上次用的好很多。后来我把Jigloo改成了VE。

摆在我们面前的是如何利用好线程。谷歌用另一只手找到了这个东西。从Java SE 6引入的swingWorker可以帮助你轻松编写多线程的Swing程序,改善你的Swing程序的结构,增加界面响应的灵活性,这正是我想要的。

Swing程序中通常有以下三种类型的线程:

初始化线程(初始线程)

UI事件调度线程(EDT)

任务线程(工作线程)

只有一个Swing程序使用EDT,EDT负责绘制和更新GUI组件,并通过调用程序的事件处理程序来响应用户交互。所有事件处理都在东部时间完成。程序和UI组件及其基本数据模型之间的交互只允许在EDT上进行。EDT上运行的所有任务都应该尽快完成,这样UI才能及时响应用户输入。

Swing编程应注意以下几点:

1.从其他线程访问UI组件及其事件处理程序将导致界面更新和绘制错误。

2.在EDT上执行耗时的任务会使程序失去响应,这将使GUI事件被阻塞在队列中而得不到处理。

3.应该使用独立的任务线程来执行耗时的计算或输入输出密集型任务,例如与数据库通信、访问网站资源、读写具有大量数据的文件。

我发展的第一阶段正是因为没有注意到这一点,导致整个节目效果不佳。程序中的每个事件都必须访问Web服务,而这些服务通常需要很多秒来响应。在此期间,如果程序在EDT上与Web服务交互,用户不能取消搜索或与界面交互,这两者都不应该在EDT上运行。

Javax.swing.SwingWorker类是Java SE 6中的一个新类。使用SwingWorker,程序可以启动任务线程异步查询,并立即返回到EDT线程。它显示使用SwingWorker后,事件处理立即返回,允许EDT继续执行后续UI事件。本来都是放在EDT上,效果难免。而使用Swingworker启动一个任务线程可以灵活响应界面。

我们来谈谈他的用法:

SwingWorker的定义如下:公共抽象类swing worker扩展对象实现可运行的未来,v。

SwingWorker是一个抽象类,因此必须继承它才能执行所需的特定任务。注意这个类有两种类型的参数:t和v .是doInBackground和get方法的返回类型,v是发布和处理方法要处理的数据类型。

SwingWorker实现了以下接口方法:

布尔取消(布尔可能中断运行)

T get()

T get(长超时,时间单位单位)

布尔值isCancelled()

布尔isDone()

SwingWorker实现了所有的接口方法。事实上,您只需要实现以下SwingWorker的抽象方法:在后台受保护的t do()Throwsexception。

doInBackground方法作为任务线程的一部分执行,负责完成线程的基本任务,并将返回值作为线程的执行结果。继承类必须重写此方法,并确保包含或表示任务线程的基本任务。使用任务对象的execute方法来调度执行,而不是直接调用此方法。

应该在获得执行结果后使用SwingW。

orker 的get方法获取doInBackground方法的结果。可以在EDT上调用get方法,但该方法将一直处于阻塞状态,直到任务线程完成。***只有在知道结果时才调用get方法,这样用户便不用等待。为防止阻塞,可以使用isDone方法来检验doInBackground是否完成。另外调用方法 get(long timeout, TimeUnit unit)将会一直阻塞直到任务线程结束或超时。获取任务结果的***地方是在done方法内:protected void done()

在doInBackground方法完成之后,SwingWorker调用done方法。如果任务需要在完成后使用线程结果更新GUI组件或者做些清理工作,可覆盖done方法来完成它们。这儿是调用get方法的***地方,因为此时已知道线程任务完成了,SwingWorker在EDT上激活done方法,因此可以在此方法内安全地和任何GUI组件交互。

没必要等到线程完成就可以获得中间结果。中间结果是任务线程在产生***结果之前就能产生的数据。当任务线程执行时,它可以发布类型为V的中间结果,覆盖process方法来处理中间结果。后文还将提供这些方法的更多详细信息。当属性改变时,SwingWorker实例能通知处理器,SwingWorker有两个重要的属性:状态和进程。任务线程有几种状态,以下面SwingWorker.StateValue枚举值来表示:
◆PENDING
◆STARTED
◆DONE

任务线程一创建就处于PENDING状态,当doInBackground方法开始时,任务线程就进入STARTED状态,当doInBackground方法完成后,任务线程就处于DONE状态,随着线程进入各个阶段,SwingWorker超类自动设置这些状态值。你可以添加处理器,当这些属性发生变化来接收通知。

最后,任务对象有一个进度属性,随着任务进展时,可以将这个属性从0更新到100标识任务进度,当该属性发生变化时,任务通知处理器进行处理。

我的使用感觉就是,象I/O操作,数据操作,网络操作等耗时的操作放到 doInBackground()中处理,任务执行中而非任务结束时发布数据,要调用publish方法.
publish方法时,SwingWorker类调度process方法。有意思的是process方法是在EDT上面执行,这意味着可以同Swing组件和其模型直接交互。可以实现你在处理任务时,给个进度条提示。

关于怎么分析SwingWorker与Swing程序就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/157458.html

(0)

相关推荐

  • 牛客网面试题

    技术牛客网面试题 牛客网面试题目录
    一、JAVA
    二、计算机网络
    三、操作系统
    四、项目
    五、数据库
    第六部分 框架
    第七部分 设计模式
    第八部分 数据结构和算法
    第九部分 Linux
    ########

    礼包 2021年12月20日
  • Tomcat9请求处理流程与启动部署过程的示例分析

    技术Tomcat9请求处理流程与启动部署过程的示例分析这篇文章主要为大家展示了“Tomcat9请求处理流程与启动部署过程的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下

    攻略 2021年12月11日
  • javascript条件式访问属性和箭头函数的示例分析

    技术javascript条件式访问属性和箭头函数的示例分析这篇文章主要介绍了javascript条件式访问属性和箭头函数的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编

    攻略 2021年11月14日
  • Dojo Build有什么用

    技术Dojo Build有什么用小编给大家分享一下Dojo Build有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Dojo 提供了一

    攻略 2021年10月19日
  • pads无模命令怎么用

    技术pads无模命令怎么用这篇文章将为大家详细讲解有关pads无模命令怎么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。全局设置(Global Settings)C……

    攻略 2021年11月11日
  • wordpress使用美国云服务器/美国VPS的优点

    技术wordpress使用美国云服务器/美国VPS的优点相比其他类型的CMS系统,开源免费的wordpress显然对于新手站长而言是最简单、最具性价比的如果您在WordPress网站中使用美国云服务器,则与虚拟空间相比,

    礼包 2021年11月17日