sun 将要在今年的晚些时候发布最新的Java平台(开发代号Mustang)。作为正式的Java平台,Standard Edition 6这个版本关注了几个重要的主题,例如兼容性和稳定性。有关完整的主题列表,参阅Java Specification Request 270,JSE 6的版本目录。
Mustang预期拥有的新特性包括(除了别的以外):。 一个编译器API。 控制台输入/输出(I/O)。 一个启动画面API。 众多的Java 2D性能改进。 XML数字签名。 一个系统托盘API。 java.io.File类的分区空间方法。 Java数据库连接(JDBC)4.0。 公共注释(Common annotations)。 脚本支持(Scripting)。 一个用于XML的流(streaming)API。 排序、过滤和加亮javax.swing.JTable内容的能力。 Javadoc标记的更新。 可编程操作网络属性(例如广播地址和子网掩码)。 方便地打印javax.swing.text.JTextComponent的内容的能力
Mustang拥有远远超出一篇文章探讨范围的新特性,因此,本文只关注新特性的一小部份。确切地说,本文将讨论用于控制台输入/输出和分区空间的方法、用于启动画面以及与系统托盘交互的API.
警告由于Mustang目前没有最终发布,一些特性还可能会被改变或者去掉。所以,当Sun公司最终发布Mustang的时候,本文中的一些代码可能会需要改动或者变得完全不相干了。
注重我使用Sun公司的Java 2 SDK版本1.6.0-rc (build 62)创建和测试了本文的代码。底层平台是Microsoft Windows ME.
控制台输入/输出
在1997年5月,Sun收到了一个改进控制台输入/输出的增强请求(RFE)。申请人非凡要求一种可以提示用户输入密码并且答应用户输入密码(任意长度)而不会在控制台显示出密码字符的方法。申请人指出,抽象窗口工具包(AWT)的setEchoChar()方法并不合用,因为它依靠于GUI的可用性,然而很多基于服务器的操作系统根本不使用GUI.
在2005年后期,Sun回应了RFE #4050435,为Mustang (build 57)添加了java.io.Console类。这个类所提供的方法可以访问与当前虚拟机相关联的基于字符的控制台设备。但是在调用这些方法之前,需要首先调用System的public static Console console()方法来获取一个Console对象。该方法将返回一个用来与控制台设备交互的Console对象,但是假如控制台设备不存在就会返回null,例如当你重定向标准输入或标准输出(或二者皆有)的时候。在调用System.console()来返回Console对象之后,下面的一段代码将检查返回的Console实例是否为null来测定控制台设备是否存在:
Console console = System.console ();if (console == null){ System.err.println ("Console not available"); return;}
假设控制台设备是存在的,你可以从控制台输入流读取密码和整行的字符,还可以向控制台输出流写入字符。为了读取密码(而不会将密码字符显示到控制台输出流),你必须调用Console的两个readPassWord()方法之一。这两个方法不答应换行符作为密码的一部分,假如达到了控制台输入流的字符数目限制,他们将返回null.