科技时代新浪首页 > 科技时代 > 学园 > 正文

野马的性格 Java SE 6.0新特性体验(2)


http://www.sina.com.cn 2006年11月20日 09:06 天极yesky

  三、 桌面集成

  Sun的Java桌面开发小组引入了若干新的特征以进一步提高Java在桌面开发领域的影响。其中三个著名的特征是:Splash屏幕支持(它让应用程序在启动过程中显示Splash屏幕),系统托盘支持(它让应用程序把图标,提示窗信息和弹出菜单添加到系统托盘),和一组新的桌面API。

  现在,我们来讨论桌面API,它有助于无缝地把Java应用程序与桌面集成到一起。该API支持Java应用程序使用一个特定的统一资源标识符(URI)启动操作系统的缺省的浏览器;启动OS的缺省的电子邮件客户端;以及启动应用程序以打开、编辑或打印与该应用程序相关联的文件。

  桌面API使用OS的文件关联机制来启动关联到特定的文件类型的应用程序。例如,.doc文件扩展经常与微软的Word关联。经由桌面API,一个Java应用程序能够启动Word以打开、打印或编辑与这个扩展名相关联的文件。

  在启动浏览器电子邮件客户端或任何应用程序之前,你的Java应用程序必须决定你的OS是否支持该API。这一决定是通过调用java.awt.Desktop类的“public static boolean isDesktopSupported()”方法实现的。如果OS支持该API,这个方法返回true;否则,它返回false。

  在调用isDesktopSupported()之后,该应用程序通过调用Desktop的“public static Desktop getDesktop()”方法继续检索Desktop对象。如果OS不支持键盘输入、显示器或鼠标,这个方法将抛出一个java.awt.Headless异常。如果OS不支持该桌面API,则抛出一个UnsupportedOperationException异常。

  现在,既然该Java应用程序已经拥有了一个桌面实例,那么,按下来,它就能够调用各种方法以浏览、发送邮件、打开、编辑或打印。在执行任何这些操作之前,该程序可以调用Desktop的“public boolean isSupported(Desktop.Action action)”方法,如果桌面支持该行为(被描述为适合的Desktop.Action枚举实例),则这个方法返回true。这些Desktop.Action枚举如下:

  · BROWSE:这个枚举实例描述OS的缺省浏览器的浏览行为。

  · MAIL:这个枚举实例描述OS的缺省电子邮件客户端的邮件行为。

  · OPEN:这个枚举实例描述与打开一个特定的文件类型相关联的一个应用程序执行的打开行为。

  · EDIT:这个枚举实例描述与编辑一个特定的文件类型相关联的一个应用程序执行的编辑行为。

  · PRINT:这个枚举实例描述与打印一个特定的文件类型相关联的一个应用程序执行的打印行为。

  【注意】在调用相应行为的Desktop方法前,你不必调用“isSupported(Desktop.Action action)”来决定是否支持该行为:你可以直接调用相应的方法,但是之后,你必须处理该方法潜在地抛出的一个UnsupportedOperationException异常。可以从Desktop存取下列行为方法:

  ①“public void browse(URI uri)”:启动用户缺省的浏览器以显示一个URI—如果浏览器能够处理这个URI的话;否则,它启动该URI缺省的处理器应用程序(这具体要依赖于在java.net.URI类中定义的协议和路径)。

  如果uri为null,则抛出一个NullPointerException异常。如果用户的缺省浏览器没有找到或它没能启动或缺省的处理器应用程序没能启动,则抛出一个java.io.IOException异常。

  ②“public void edit(File file)”:启动相关联的编辑器应用程序并且打开一个文件进行编辑。
如果file为null,则抛出一个NullPointerException异常。如果指定的文件不存在,则抛出一个IllegalArgumentException异常。最后,如果指定的文件相关联的应用程序没能启动,或这个文件没有相关联的编辑器,则抛出一个IOException异常。

  ③“public void mail()”:启动用户缺省的电子邮件客户端的邮件编辑窗口。

  如果用户缺省的电子邮件客户端没有发现或启动失败,则抛出一个IOException异常。

  ④“public void mail(URI mailtoURI)”:启动用户缺省的电子邮件客户端的邮件编辑窗口,填充由一个“mailto:”URI指定的消息域。这个URI能够指定包括“cc”,“subject”和“body”在内的各种消息域。

  如果mailtoURI为null,则抛出一个NullPointerException异常。如果URI的模式不是mailto,则抛出一个IllegalArgumentException异常。如果用户缺省的电子邮件客户端没有发现或启动失败,则抛出一个IOException异常。

  ⑤“public void open(File file)”:启动相关联的应用程序以打开该文件。如果指定的文件是一个目录,则启动OS的文件管理器以打开它。

  如果file为 null,则抛出一个NullPointerException异常。如果指定的文件不存在,则抛出一个IllegalArgumentException异常。最后,如果该指定的文件没有相关联的应用程序,或如果这个应用程序没能启动,则抛出一个IOException异常。

  ⑥“public void print(File file)”:使用相关联的应用程序的打印命令并使用本地桌面打印设备打印一个文件。

  如果file为null,则抛出一个NullPointerException异常。如果指定的文件不存在,则抛出一个IllegalArgumentException异常。如果指定的文件没有相关联的能够用于打印其内容的应用程序,则抛出一个IOException异常。

  【注意】如果一个安全管理器存在并且不允许执行要求的行为的话,上面列出的每一个方法都会抛出一个SecurityException异常。

  为此,我创建了一个展示桌面API用法的DesktopDemo应用程序。这个应用程序创建了一个包含一系列浏览,邮件,打开,编辑,和打印等单选按钮的GUI界面;还有一个文本域用于输入一个URI或文件名。在输入一个URI或文件名之后,点击适当的按钮便可以从桌面上启动一个应用程序。本文示例源码中的列表2展示了这个文件DesktopDemo.java(略)。

  在编译和运行DesktopDemo后,在文本域输入一个文件名并点击Open,Edit或Print中的一个按钮以启动该文件相应的应用程序。或输入一个URI并点击“Browse”或“Mail”。图1展示了我已经在文本域中输入了一个邮件URI的屏幕快照。

野马的性格JavaSE6.0新特性体验(2)
图1.在此,当输入一个邮件URI时,我没有指定“mailto:”前缀,因为我的电子邮件客户端把这个前缀自动地加入到邮件编辑窗口中的接收者的电子邮件地址的前面。

  这个邮件URI仅包含接收者的电子邮件地址和一个主题。当然,我也可以包括正文文本,这可以通过添加“&BODY=”,其后面再跟着一些文本的方法实现。在点击“Mail”单选按钮后,我的电子邮件客户端的邮件编辑窗口中将在正确位置显示接收者的电子邮件地址和主题,如图2所示。

野马的性格JavaSE6.0新特性体验(2)
图2.这里所提供的邮件URI还能够指定除主要接收者的电子邮件地址外的其它邮件地址。

[上一页] [1] [2] [3] [4] [下一页]

本文导航:
·存取权限控制方法
·桌面集成
·以编程方式存取网络参数
·表格排序与过滤

发表评论 _COUNT_条

爱问(iAsk.com) 相关网页共约11,500,000



评论】【论坛】【收藏此页】【 】【多种方式看新闻】【下载点点通】【打印】【关闭




科技时代意见反馈留言板 电话:010-82628888-5595   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2006 SINA Inc. All Rights Reserved

新浪公司 版权所有