当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 原文:http://today.java.net/pub/a/today/2003/10/24/swing.html?page=1 不正确的Swing线程是运行缓慢、无响应和不稳定的Swing应用的主要原因之一。
 

 

 ·写程序应该注意的地方    »显示摘要«
    摘要:写程序应该注意的地方: 1. 对于文本编辑框,一定要判断是否含有非法字符。对于数字型一定要判断是否含有非数字。对于字符型,一定要判断是否在允许的字符内。 2. 对于在某一个期间,一定要判断前面一个日期是否大于后面一个日期。还要判断2月份的日期。(www.chinaren.com中的出生日期就没有判断这一点)。不要告我诽谤:) 3. 对于路径选择,一定要判断路径是否合法,是否可以访问。输入的路径长度是否超过了最大字符长度。 4. 对于要写进数据库的值......
 ·xml4c完美兼容中文的补充    »显示摘要«
    摘要: xml4c完美兼容中文的补充 xml4c兼容中文的问题一直是大家比较头疼的问题,网上也有很多关于这方面的讨论,但是一直没有太好的结论。在ibm developerworks的网站上,找到了邹月明先生的一篇文章《剖析xml4c源码,完美兼容中文xml》,该文章对xml4c的源码进行了剖析,对xml4c的源码进行了修改,从而达到了对中文兼容的目的。我也针对xml4c的源码按照文章中的说法进行了修改,这种方法在我的debug版本中确实完美的解决了x......


对Swing线程的再思索 (上)

原文:http://today.java.net/pub/a/today/2003/10/24/swing.html?page=1

【相关文章:学习ShellCode(一)

【扩展阅读:了解TCP/IP协议

【扩展信息:学习J2SE过程中的30个基本概念(FR

不正确的swing线程是运行缓慢、无响应与不稳定的swing应用的主要原因之一。这是许多原因造成的,从开发人员对swing单线程模型的误解,到保证正确的线程执行的困难。即使对swing线程进行了很多努力,应用线程逻辑也是很难理解与维护的。本文阐述了如何在开发swing应用中使用事件驱动编程,以大大简化开发、维护,并提供高灵活性。

背景

既然我们是要简化swing应用的线程,首先让我们来看看swing线程是怎么工作的,为什么它是必须的。swing api是围绕单线程模型设计的。这意味着swing组件必须总是通过同一个线程来修改与操纵。为什么采用单线程模型,这有很多原因,包括开发成本与同步swing的复杂性--这都会造成一个迟钝的api。为了达到单线程模型,有一个专门的线程用于与swing组件交互。这个线程就是大家熟知的swing线程,awt(有时也发音为“ought”)线程,或者事件分派线程。在本文的下面的部分,我选用swing线程的叫法。

既然swing线程是与swing组件进行交互的唯一的线程,它就被赋予了很多责任。所有的绘制与图形,鼠标事件,组件事件,按钮事件,与所有其它事件都发生在swing线程。因为swing线程的工作已经非常沉重了,当太多其它工作在swing线程中进行处理时就会发生问题。会引起这个问题的最常见的位置是在非swing处理的地方,像发生在一个事件监听器方法中,比如jbutton的actionlistener,的数据库查找。既然actionlistener的actionperformed()方法自动在swing线程中执行,那么,数据库查找也将在swing线程中执行。这将占用了swing的工作,阻止它处理它的其它任务--像绘制,响应鼠标移动,处理按钮事件,与应用的缩放。用户以为应用死掉了,但实际上并不是这样。在适当的线程中执行代码对确保系统正常地执行非常重要。 

既然我们已经看到了在适当的线程中执行swing应用的代码是多么重要,现在让我们如何实现这些线程。我们看看将代码放入与移出swing线程的标准机制。在讲述过程中,我将突出几个与标准机制有关的问题与难点。正如我们看到的,大部分的问题都来自于企图在异步的swing线程模型上实现同步的代码模型。从那儿,我们将看到如何修改我们的例子到事件驱动--移植整个方式到异步模型。

通用swing线程解决方案

让我们以一个最常用的swing线程错误开始。我们将企图使用标准的技术来修正这个问题。在这个过程中,我们将看到实现正确的swing线程的复杂性与常见困难。并且,注意在修正这个swing线程问题中,许多中间的例子也是不能工作的。在例子中,我在代码失败的地方以//broken开头标出。好了,现在,让我们进入我们的例子吧。

假设我们在执行图书查找。我们有一个简单的用户界面,包括一个查找文本域,一个查找按钮,与一个输出的文本区域。这个接口如图1所示。不要批评我的ui设计,这个确实很丑陋,我承认。

 

图 1. 基本查询用户界面

用户输入书的标题,作者或者其它条件,然后显示一个结果的列表。下面的代码例子演示了按钮的actionlistener在同一个线程中调用lookup()方法。在这些例子中,我使用了thread.sleep()休眠5秒来作为一个占位的外部查找。线程休眠的结果等同于一个耗时5秒的同步的服务器调用。

private void searchbutton_actionperformed() {

    outputta.settext("searching for: " +


...   下一页
    摘要:1.字节和unicode java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。因此java要对这些字节流经行转化。char是unicode的,而byte是字节。java中byte/char互转的函数在sun.io的包中间有。其中bytetocharconverter类是中调度,可以用来告诉你,你用的convertor。其中两个很常用的静态函数是 public static bytetocharconv......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE