利用Java技术编写桌面软件基础

 在学习Java编程语言的细节和语法时,我们会碰到这样一个问题:开发桌面应用软件需要使用哪些Java技术,应当引入哪些package?这一问题的答案取决于开发的应用软件类型和它的作用。

  这篇文章面向初学Java技术的开发人员,它描述了开发不同类型的桌面应用软件涉及的技术,以及何时决定使用它们。以后的文章将详细阐述如何使用这些技术,以及如何联合使用它们。首先,我们将开始在这篇文章中学习部分技术。

  要使用这篇文章中的任何技术,我们必须在计算机上安装Java平台。

  桌面应用软件的类型、外观、功能

  在学习大量的Java技术前,我们必须搞清楚谁会使用我们的应用软件、他们如何使用它、它在个人电脑还是在网络上运行,以及应用软件采用什么样的外观或图形用户界面(GUI)?

  在开发应用软件前,考虑下面5个方面:

  ·应用软件的发布

  ·是否采用GUI

  ·应用软件的功能

  ·应用软件的部署

  ·其它Java技术

  应用软件的发布

  首先,我们必须确定我们的应用软件是否是分布式软件。分布式应用软件运行在多台计算机上,并通过一个网络通讯。一些分布式应用软件是二个独立的软件:后端服务器软件和前端客户端软件。后端软件运行在Solaris或Linux等共享系统上,管理磁盘、打印机、调制解调器等共享资源。后端软件包含有应用软件主要的处理能力;前端客户端软件运行在工作站或个人电脑上,它是用户在使用应用软件时能够看到的部分。前端客户端软件处理用户界面功能,例如接收键盘的输入、在显示屏上显示输出。

  分布式应用软件可以非常简单,只在一台客户端计算机和一台服务器上运行;也可以很复杂,在多台客户端和服务器上运行。非分布式应用软件在本地计算机上运行,无需访问网络。例如,我们可以编写一个只在本地机上运行的简单的计算器软件,我们也可以使这类软件成为分布式软件。

  通常,我们开发的应用软件都是分布式软件,在网络或互联网上运行,供许多计算机使用。

  要开发分布式应用软件,我们需要学习和使用Java Remote Method Invocation(Java RMI),远程Java对象的方法可以被其它Java虚拟机(JVM)调用。Java RMI利用对象序列化对参数进行序列化和反序列化,它不会截断类型,支持真正的面向对象的多态性。

  下面是实现Java RMI需要用到的一些package:

  ·java.rmi
  ·java.rmi.activation
  ·java.rmi.dgc
  ·java.rmi.registry
  ·java.rmi.server

  注意,下面的package名字是以"javax"而非"java"开头的:

  ·javax.rmi
  ·javax.rmi.CORBA
  ·javax.rmi.ssl

  是否采用GUI

  应用软件通常包含有许多具有不同功能的微型软件。一些微型软件有图形用户界面(GUI)━━可能只是一个简单的窗口或对话框,许多微型软件没有GUI。但是,应用软件本身可能有一个主GUI━━包含有菜单、按钮、工具条、文本框、其它图形功能。GUI主要用于用户输入━━无论用户点击一个按钮或输入信息,GUI也可以向用户提供更多的信息。另外,GUI组件也可以向用户显示系统返回的信息。

  要创建GUI,我们需要使用Java Foundation Classes/Swing(JFC/Swing)和Abstract Window Toolkit(AWT)API。那些package中的许多类和界面使我们能够方便地创建按钮、check-box对象、文本框、其它组件,以及组织它们的组件。

  创建应用软件的框架和所有GUI组件最为简单的方式是使用NetBeans IDE等集成开发环境(IDE)。该IDE使我们能够拖放组件,由它为我们编写复杂的组件代码。学习使用它非常容易,能够为我们节约大量的时间。但是,所有开发人员必须理解JFC/Swing和AWT的工作原理,因此我们必须亲手进行足够的实践,理解这些概念。

  编写GUI软件使用的主要Package

  面向AWT

  ·java.applet
  ·java.awt
  ·java.awt.color
  ·java.awt.datatransfer
  ·java.awt.dnd
  ·java.awt.event
  ·java.awt.font
  ·java.awt.geom
  ·java.awt.im
  ·java.awt.im.spi
  ·java.awt.image
  ·java.awt.image.renderable
  ·java.awt.print

  面向JFC/Swing

  ·javax.swing
  ·javax.swing.border
  ·javax.swing.colorchooser
  ·javax.swing.event
  ·javax.swing.filechooser
  ·javax.swing.plaf
  ·javax.swing.plaf.basic
  ·javax.swing.plaf.metal
  ·javax.swing.plaf.multi
  ·javax.swing.plaf.synth
  ·javax.swing.table
  ·javax.swing.text
  ·javax.swing.text.html
  ·javax.swing.text.html.parser
  ·javax.swing.text.rtf
  ·javax.swing.tree
  ·javax.swing.undo

  当然,我们无需引入所有这些package,只需引入我们使用的package即可。 如果我们使用NetBeans IDE,就会发现,在我们使用JFC/Swing或AWT组件时,它就会在代码中创建引入语句。仅仅从它们的名字中,我们就可以很好地理解这些package的作用。

  应用软件的功能

  这篇文章不可能讨论我们在应用软件中使用的所有功能,但一些功能对于许多或大多数应用软件而言是通用的。

  要使GUI中的按钮、菜单、文本框完成一些功能,我们需要理解事件处理机制。事件处理程序(event handler)是一个类,包含有当用户点击一个按钮或选择一个菜单时会执行的指令。事件处理程序可以执行许多操作,应用软件可以在GUI中显示反馈信息、在文件或数据库中写入数据、进行数学运算、显示结果,或者完成一些简单的操作,例如打开一个对话框供用户输入更多的信息。

  读写数据

  将用户输入的信息写入一个文件系统,以及在GUI中显示从文件中读取的数据,是应用软件中常见的操作。例如,用户可以在一个GUI表单中输入姓名、地址、电话号码,在服务器上注册软件。处理这些数据的一种方式是让应用软件将数据写入到主机或服务器的一个文件中。
Java.io package通过数据流、序列化、文件系统提供系统输入/输出(I/O)。一个I/O流代表着一个输入源或一个输出目标。流可以代表许多不同类型的源或目标,包括磁盘文件、设备、其它软件、内存数组。流支持许多不同种类的数据,包括字节、简单的数据类型、本地化字母、对象。一些流只是简单地传输数据,另外一些类则处理和转换数据。

  无论内部工作原理如何,对于使用它们的软件而言,所有的流都是相同的简单模式。一个流就是一个数据序列。在java.io package中被使用得比较多的二个类是FileInputStream和FileOutputStream,这二者都创建与文件相连的字节流。
  存储数据的一种常用方法是使用数据库管理系统。要在软件中编写向数据库写数据、然后获得结果的软件代码,我们就需要学习使用JDBC API,JDBC API提供Java编程语言统一的数据访问方法,使我们能够访问几乎所有数据源━━从关系数据库到电子表格,再到普通文件。JDBC技术还提供了用于开发工具和其它接口的通用代码。

  JDBC API支持数据库访问的二层和三层模式

  在二层模式中,Java applet或应用软件直接与数据源通讯。这种方法要求能够与应用软件访问的特定数据源直接通讯的JDBC驱动程序。 用户的命令被传输给数据库或其它数据源,这些命令的结果会被返送给用户。数据源可能位于用户通过网络连接的其它计算机上,这被称为是客户机-服务器配置:用户的计算机是客户机,托管有数据源的计算机则是服务器。而网络则可能是一家公司的内联网或互联网。

  在三层模式中,应用软件将命令发送给中间层,中间层再将命令发送给数据源。在处理命令后,数据源将结果返回给中间层,中间层会将结果返回给用户。管理信息系统(MIS)主管发现三层模式非常有吸引力,因为中间层使得对数据存取和更新的控制成为可能。三层模式的另一个好处是它能够简化应用软件的部署。例如,数据可以在数据库中被修改、在不影响用户体验的情况下增添新组件。最后,在许多情况下,三层架构具有性能优势,因为多重事务的效率会更高。

  在编写利用JDBC API存取数据库的软件时,我们需要使用下面的组件:

  ·java.sql package中的类和界面
  ·Java DB数据库等数据库管理系统
  ·使用的数据库管理系统的驱动程序

  执行计算和管理数据

  我们可能需要编写大量的代码,由于必须输入所有的Java代码,我们应当熟练使用java.lang package。

  我们应当理解java.lang package中的字符串,字符串在Java编程中被广泛使用。与StringBuilder类一样,String类用于创建和处理字符串。

  我们还应当熟练使用java.lang package中的Number类、及其子类,它使我们能够使用这些类的实例,而不是简单的数字类型。PrintStream和DecimalFormat类提供了"写"格式化的数字输出的方法。最后,Math类提供的数学函数补充了Java语言中的数学运算符,它提供了面向三角函数、指数函数等函数的方法。

  为了处理各种类型的数据,我们需要学习collections framework━━表示和处理collections的统一架构。Collection有时也被称作container,是将多个元素组合进一个单元的对象。Collections被用来存储、访问、处理、传输聚合数据。通常情况下,collection表示组成一个合乎自然规律的群体的数据项,例如一迭卡片、一个邮件文件夹、一个字母集、电话号码簿。

  图1显示的是collection framework,以及java.util package中常用的界面


图1: Collection Framework 和java.util Package中的一些界面


  核心的Collection界面是collections framework的基础。Set是一种特殊类型的 Collection,SortedSet是一种特殊类型的Set,等等。 需要注意的是,一个层包含有二棵截然不同的树。尽管使用方式与collection 相似,Map并非真正的Collection。Map界面提供有3个collection视图,使Map的内容能够被看作一系列的键、值的集合、键-值映射集合。

  并发

  应用软件通常一次完成多个任务。例如,流式音频应用软件必须同时从网络上读取数字音频内容、解密、播放,并更新对用户显示的内容; 无论排版或更新显示内容的任务多么繁忙,字处理软件应当随时响应键盘和鼠标事件。这种能够同时完成数种任务的软件就是并发软件。

  Java.util.concurrent package提供基本的并发支持。


  错误处理

  Java语言使用异常处理错误和其它意外事件。异常是指在软件运行期间、破坏了软件指令正常流程的事件。当一个方法中出现错误时,方法会创建一个对象,将它提交给运行时间库系统。该对象被称作异常对象,包含有相关错误的信息,其中包括类型、错误发生时软件的状态。 创建一个异常对象,并将它提交给运行时间库系统就被称作是"抛出异常"。

  要在应用软件中处理异常,我们需要理解如何编写代码,使应用软件能够抛出或捕捉一个异常。

  应用软件的部署

  当希望应用软件在浏览器中运行,或应用软件与web网页内容紧密集成时,使用Java插件技术部署applet。如果希望应用软件在桌面上运行,就使用Java Web Start技术。

  Java Web Start技术要求应用软件被封装为Java Archive(JAR)文件。JAR文件格式使我们能够将多个文件整合到一个存档文件中。通常,一个JAR文件包含类文件、与applet和应用软件相关的辅助性资源文件。

  JAR文件采用了ZIP文件格式,因此我们能够用它完成无损数据压缩、存档、解压缩、文档解包等任务。这些都是JAR文件最常见的用途,通过只使用这些最基本的功能,我们就能够发现JAR文件的许多优点。

  如果想利用JAR文件格式提供的电子签名等先进功能,我们需要首先熟悉基本操作。要利用JAR文件完成基本任务,我们需要使用Java Development Kit(JDK)提供的JAR工具。

  一旦应用软件被封装为JAR文件,我们就可以使用Java Web Start技术部署应用软件了。Java Web Start提供了点击一下鼠标启动全功能应用软件的能力。用户可以下载和启动应用软件━━例如一个完整的电子表格软件或互联网聊天客户端,而无需经过复杂的安装过程。
  使用Java Web Start软件,通过点击web网页中的一个链接,用户就能够启动基于Java技术的应用软件。该链接指向一个Java Network Launching Protocol(JNLP)文件,它指示Java Web Start软件下载、缓冲、运行应用软件。

  其它Java技术

  这一部分将讨论我们应当考虑的其它Java技术。

  应用软件安全

  大多数开发人员非常担心应用软件的安全性,Java技术有助于从多个方面解决这种担心。Java技术包含有大量的API、工具,以及常用安全算法、机制、协议的实现。Java平台安全性涉及许多领域,其中包括密码、公钥架构、安全通讯、认证、访问控制。Java安全技术为我们提供了完整的应用软件安全框架,也为用户或系统管理员提供了一系列安全地管理应用软件所需要的工具。

  安全Package和类过多,我们在这里无法一一列出,但一些优秀的资源使我们能够开始学习与Java应用软件的安全有关的知识。

  全屏独占模式API

  如果在应用软件中需要高性能图形━━例如游戏、幻灯演示等软件,我们就需要掌握全屏独占模式API。全屏独占模式是一个功能强大的新功能,它它我们能够"暂停"窗口系统,使应用软件能够直接向显示屏上写内容。

  国际化

  国际化指的是一个设计应用软件的过程,在无需修改设计的情况下就能够使应用软件适用于多种语言和地区。 "internationalization"这个词有时也被缩写成"i18n",因为这个单词的第一和最后一个字母之间有16个字母。为实现国际化,我们使用得最多的package是java.util。

  总结

  数量众多的Java技术会使我们感到困惑,但这篇文章使我们能够了解开发桌面应用软件所需要的技术。如果想让我们的应用软件具有一定的功能,我们就会找到很好的Java技术帮助实现我们需要的功能。
posted @ 2009-04-25 18:17  小宇飞刀  阅读(468)  评论(0编辑  收藏  举报