JDK6 新特性
Posted peter1018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK6 新特性相关的知识,希望对你有一定的参考价值。
Desktop类和SystemTray类
JDK6在java.awt包下新增了两个类:Desktop和SystemTray
Desktop类:允许 Java 应用程序启动已在本机桌面上注册的关联应用程序来处理 URI 或文件。
Desktop类的主要方法:
1.browse(URI uri): 使用默认浏览器打开uri资源。
2.checkActionSupport(Action actionType): 检查是否支持的Action。
3.open(File file): 启动关联应用程序来打开文件。
4.edit(File file): 启动关联编辑器应用程序并打开一个文件编辑。
5.print(File file): 使用关联应用程序打印文件。
6.mail(): 启动用户默认邮件客户端的邮件组合窗口。
7.mail(URI mailtoURI): 启动用户默认邮件客户端的邮件组合窗口, 填充由 mailto:URI 指定的消息字段。
示例代码:
1 import java.awt.*; 2 import java.io.File; 3 import java.io.IOException; 4 import java.net.URI; 5 6 public class Test { 7 public static void main(String[] args) throws IOException { 8 //先判断当前平台是否支持Desktop类 9 if (Desktop.isDesktopSupported()) { 10 //获取Desktop实例 11 Desktop desktop = Desktop.getDesktop(); 12 //使用默认浏览器打开链接 13 desktop.browse(URI.create("http://www.cnblogs.com/peter1018")); 14 // 打开指定文件/文件夹 15 desktop.open(new File("D:\\")); 16 17 //...... 18 19 //其他方法可以自行演示... 20 }else { 21 System.out.println("当前平台不支持 Desktop类!"); 22 } 23 24 } 25 26 }
SystemTray类:代表一个系统托盘桌面。在微软的Windows上,它被称为“任务栏”状态区域,在Gnome上,它被称为“通知”在KDE上,它被称为“系统托盘”。该系统托盘由在桌面上运行的所有应用程序共享。
SystemTray类的主要方法:
1.isSupported() : 检测系统是否支持SystemTray类。
2.getSystemTray() : 获得SystemTray实例。
1.add(TrayIcon trayIcon): 在“系统托盘”上添加一个“TrayIcon”。TrayIcon对象代表一个托盘图标,它可以有一个工具提示(文本),一个图像,一个弹出框菜单,以及一组与之相关的侦听器。托盘图标一旦出现,就会在系统托盘中显示。
2.remove(TrayIcon trayIcon): 删除指定的“TrayIcon”。
3.getTrayIcons(): 返回一个由这个托盘添加到托盘上的所有图标的数组应用程序。
4.getTrayIconSize(): 以像素为单位,返回在系统托盘中占据的一个托盘图标的大小。
5.addPropertyChangeListener(String propertyName,PropertyChangeListener listener): 将 PropertyChangeListener 添加到监听器
6.removePropertyChangeListener(String propertyName,PropertyChangeListener listener): 将PropertyChangeListener 从监听器移除
7.getPropertyChangeListeners(String propertyName) : 返回所有已关联的监听器数组
示例代码:
1 import javax.swing.*; 2 import java.awt.*; 3 4 public class Test { 5 public static void main(String[] args) throws AWTException { 6 //先判断当前平台是否支持SystemTray类 7 if (SystemTray.isSupported()) { 8 //获取SystemTray实例 9 SystemTray systemTray = SystemTray.getSystemTray(); 10 //获得托盘显示图标 11 ImageIcon imageIcon=new ImageIcon("D:\\icon.jpg"); 12 //获得Image对象 13 Image icon=imageIcon.getImage(); 14 //任务栏程序托盘图标 15 TrayIcon trayicon = new TrayIcon(icon,"JAVA系统托盘"); 16 //关键点,设置托盘图标的自适应属性,这样才能在系统显示托盘处正常显示出需要的图片。 17 trayicon.setImageAutoSize(true); 18 //添加系统托盘 19 systemTray.add(trayicon); 20 //...... 21 //其他方法可以自行演示... 22 //移除系统托盘 23 systemTray.remove(trayicon); 24 }else { 25 System.out.println("当前平台不支持 SystemTray类!"); 26 } 27 28 } 29 30 }
展示结果如下:
使用JAXB2来实现对象与XML之间的映射
JAXB是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式,反之亦然。我们把对象与关系数据库之间的映射称为ORM, 其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping)。原来JAXB是Java EE的一部分,在JDK6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK6中自带的这个JAXB版本是2.0, 比起1.0(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,这就极大简化了开发的工作量。实际上,在Java EE 5.0中,EJB和Web Services也通过Annotation来简化开发工作。另外,JAXB2在底层是用StAX(JSR 173)来处理XML文档。
重要的注解和说明
注解 | 说明 |
@XmlRootElement |
将类或enum类型映射到XML元素,类名或enum名作为根节点 |
@XmlAttribute |
将JavaBean属性映射到XML属性 |
@XmlElement |
将JavaBean属性映射到源自属性名的XML元素 |
@XmlAnyAttribute |
将JavaBean属性映射到通配符属性的映射 |
@XmlAnyElement |
将JavaBean属性映射到XML infoset表示法和/或JAXB |
@XmlElements |
一个用于多XmlElement注解的容器。 |
@XmlID |
将JavaBean属性映射到XML ID |
@XmlIDREF |
将JavaBean属性映射到XML IDREF |
@XmlList |
用来将一个属性映射到一个List |
@XmlSchema |
将包映射到XML名称空间 |
@XmlTransient |
该属性无需映射到XML |
示例代码:
Address类
1 import javax.xml.bind.annotation.XmlAttribute; 2 import javax.xml.bind.annotation.XmlElement; 3 4 public class Address { 5 6 @XmlAttribute 7 String province; 8 @XmlElement 9 String area; 10 @XmlElement 11 String street; 12 13 public Address() {} 14 15 public Address(String province, String area, String street) { 16 this.province = province; 17 this.area = area; 18 this.street = street; 19 } 20 21 @Override 22 public String toString() { 23 return "Address{" + 24 "province=‘" + province + ‘‘‘ + 25 ", area=‘" + area + ‘‘‘ + 26 ", street=‘" + street + ‘‘‘ + 27 ‘}‘; 28 } 29 }
Person类
1 import javax.xml.bind.annotation.XmlAttribute; 2 import javax.xml.bind.annotation.XmlElement; 3 import javax.xml.bind.annotation.XmlRootElement; 4 5 @XmlRootElement 6 public class Person{ 7 8 @XmlAttribute 9 private String name; 10 11 @XmlElement 12 private int age; 13 14 @XmlElement 15 private Address address; 16 17 public Person() { 18 } 19 20 public Person(String name, int age, Address address) { 21 this.name = name; 22 this.age = age; 23 this.address = address; 24 } 25 26 @Override 27 public String toString() { 28 return "Person{" + 29 "name=‘" + name + ‘‘‘ + 30 ", age=" + age + 31 ", address=" + address + 32 ‘}‘; 33 } 34 }
测试类:
1 import javax.xml.bind.JAXBContext; 2 import javax.xml.bind.JAXBException; 3 import javax.xml.bind.Marshaller; 4 import javax.xml.bind.Unmarshaller; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 import java.io.IOException; 8 9 public class Test { 10 public static void main(String[] args) throws JAXBException, IOException { 11 JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); 12 13 //根据Person对象转换为person.xml文件 14 Marshaller marshaller = jaxbContext.createMarshaller(); 15 Address address = new Address("广东省","深圳市","宝安区"); 16 Person person = new Person("niannianjiuwang", 20, address); 17 FileWriter fileWriter = new FileWriter("D:\\person.xml"); 18 marshaller.marshal(person, fileWriter); 19 20 //根据person.xml文件转换为对象 21 FileReader fileReader = new FileReader("D:\\person.xml"); 22 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 23 Person personNew = (Person) unmarshaller.unmarshal(fileReader); 24 System.out.println(personNew); 25 } 26 }
输出结果:
先看看person.xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <person name="niannianjiuwang"> <age>20</age> <address province="广东省"> <area>深圳市</area> <street>宝安区</street> </address> </person>
控制台结果:
Person{name=‘niannianjiuwang‘, age=20, address=Address{province=‘广东省‘, area=‘深圳市‘, street=‘宝安区‘}}
理解Stax
使用Compiler API
轻量级Http Server API
插入式注解处理 API
用Console开发控制台程序
对脚本语言的支持
Common Annotations
以上是关于JDK6 新特性的主要内容,如果未能解决你的问题,请参考以下文章
译ECMAScript 2016, 2017, 2018 新特性之必读篇