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)

相关推荐

  • 美国云服务器有哪些安全优势

    技术美国云服务器有哪些安全优势很多租用美国云服务器的用户都会担心一个云服务器安全性的问题,由于很多云服务器是不带防御的,所以遇到恶意攻击的时候经常会束手无策您将在下面找到威胁云服务器环境的主要安全问题类型。您会注意到它们

    礼包 2021年10月26日
  • 如何让充分利用R+Python

    技术如何让充分利用R+Python今天就跟大家聊聊有关如何让充分利用R+Python,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。如果你从事数据科学的工作,可能会

    2021年10月26日
  • 怎么用Java实现网上电商项目

    技术怎么用Java实现网上电商项目这期内容当中小编将会给大家带来有关怎么用Java实现网上电商项目,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、项目简述本系统功能包括: 一款基于S

    攻略 2021年11月12日
  • Scope属性在C#和VC++中怎么使用

    技术Scope属性在C#和VC++中怎么使用本篇内容介绍了“Scope属性在C#和VC++中怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大

    攻略 2021年11月29日
  • 张僧繇怎么读,张僧繇的点睛之笔指的是什么

    技术张僧繇怎么读,张僧繇的点睛之笔指的是什么张僧繇是梁朝著名的画师。有一次,皇帝命令他在金陵安乐寺的墙壁上画龙。不一会儿,两条栩栩如生的龙就出现在墙壁上了。这时皇帝发现这两条龙都没有眼睛,就问张僧繇这是为什么。张僧繇回答

    生活 2021年10月30日
  • yum本地及远程仓库搭建

    技术yum本地及远程仓库搭建 yum本地及远程仓库搭建Linux中安装软件的三种方式
    1、哪三种方式rpm安装
    yum安装
    源代码编译安装2、区别
    ? rpm安装类似于windows中的安装包,下载下来

    礼包 2021年12月17日