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 新特性的主要内容,如果未能解决你的问题,请参考以下文章

Java8常用新特性实践

java8新特性

译ECMAScript 2016, 2017, 2018 新特性之必读篇

Java 10 的 10 个新特性,将彻底改变你写代码的方式!

jdk1.6新特性

mac下面安装多个j d k