一. Desktop 类
Desktop 类是java的桌面类,可以启动程序,是jdk 1.6 时发布的,位于 java.awt 包下。
可以支持以下几种功能:
- open 打开文件
- edit 编辑文件
- print 打印文件
- mail 发送邮件
- browse 浏览器打开网址
代码中体现为: Action 枚举。
public static enum Action { OPEN, EDIT, PRINT, MAIL, BROWSE };
有其对应的方法
是单例模式的, 私有构造
private Desktop() { peer = Toolkit.getDefaultToolkit().createDesktopPeer(this); }
需要静态方法 getDesktop() 来构建实例化对象。
public static synchronized Desktop getDesktop(){ if (GraphicsEnvironment.isHeadless()) throw new HeadlessException(); if (!Desktop.isDesktopSupported()) { throw new UnsupportedOperationException("Desktop API is not " + "supported on the current platform"); } sun.awt.AppContext context = sun.awt.AppContext.getAppContext(); Desktop desktop = (Desktop)context.get(Desktop.class); if (desktop == null) { desktop = new Desktop(); context.put(Desktop.class, desktop); } return desktop; }
在使用的时候,最好先验证一下,PC 环境 是否支持 Desktop 类的使用
public static boolean isDesktopSupported(){ Toolkit defaultToolkit = Toolkit.getDefaultToolkit(); if (defaultToolkit instanceof SunToolkit) { return ((SunToolkit)defaultToolkit).isDesktopSupported(); } return false; }
也有一个具体判断,是否支持某种方式的操作方法,不对外提供这种方式。
public boolean isSupported(Action action) { return peer.isSupported(action); }
二. 各种方式的验证
二.一 browse 浏览器验证
调用电脑默认的浏览器,进行访问网址。 如访问 老蝴蝶的csdn 网址。
// 测试浏览器 @Test public void testBrowse(){ if(Desktop.isDesktopSupported()){ //是否支持桌面 Desktop desktop=Desktop.getDesktop(); try { // 构建正确的网址 desktop.browse(new URI("https://blog.csdn.net/yjltx1234csdn")); } catch (IOException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } } }
测试运行,便会进行访问。 默认是火狐浏览器。
URL 时,有时候会造成 编码上的错误, 需要转换一下。
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。
参考: https://blog.csdn.net/liuchuanhong1/article/details/70161149
二.二 open 打开文件
可以打开 常见的文件,如 普通文件(包括常见的.txt 和.word 之类的),图片,视频,应用。
@Test public void testOpen(){ if(Desktop.isDesktopSupported()){ //支持桌面 Desktop desktop=Desktop.getDesktop(); try { //desktop.open(new File("D:"+File.separator+"QQ.java")); // 打开普通文件 //desktop.open(new File("D:"+File.separator+"image.jpg")); //打开图片 //desktop.open(new File("D:"+File.separator+"servlet.mp4")); //打开视频 desktop.open(new File("I:\\Program Files\\Tencent\\QQ\\Bin\\QQScLauncher.exe")); //打开应用。 } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
二.三 edit 编辑文件
可以编辑普通的文件,会先打开, 但是有些文件是不能编辑的,如mp4 视频文件和应用文件。
// 测试编辑文件 @Test public void testEdit(){ if(Desktop.isDesktopSupported()){ //支持桌面 Desktop desktop=Desktop.getDesktop(); try { desktop.edit(new File("D:"+File.separator+"QQ.java")); //这样,就是错误的。 //desktop.edit(new File("D:"+File.separator+"servlet.mp4")); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
如果尝试编辑 servlet.mp4 文件时,会报错
二.四 print 打印文件
只是进入到打印的动作,并不是真正与打印机关联一键打印了。
@Test public void testPrint(){ if(Desktop.isDesktopSupported()){ //支持桌面 Desktop desktop=Desktop.getDesktop(); try { //会调动打印程序,进行打印的界面,而不是自动打印成功了。 desktop.print(new File("D:"+File.separator+"word.docx")); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
测试时,会进入到
打开打印的界面。 与点击File 菜单的打印选项 执行动作一样。
二.五 mail 邮件发送
需要安装邮件类软件,如 火狐邮箱,office 自带的 outlook 等。
@Test public void testMail(){ if(Desktop.isDesktopSupported()){ //支持桌面 Desktop desktop=Desktop.getDesktop(); try { desktop.mail(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
老蝴蝶没有安装这些软件,如果试图测试运行的话,会报错。
猜想,如果安装了的话,会打开软件,进入到发送邮件的页面。
安装了一个邮件软件 Firefox .
mail(URI uri) 这种参数的形式,约束可以查看网址:
https://www.ietf.org/rfc/rfc2368.txt
例子有:
测试方法为:
@Test public void testMail(){ if(Desktop.isDesktopSupported()){ //支持桌面 Desktop desktop=Desktop.getDesktop(); try { try { // desktop.mail(new URI("mailto:1290513799@qq.com?subject='测试服务器是否好用'&body='两个蝴蝶飞'")); // '' 会当成内容,所以应该去除。 } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } catch (URISyntaxException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
去掉单引号为:
// 要去掉 < > desktop.mail(new URI("mailto:1290513799@qq.com?subject=测试服务器是否好用&body=两个蝴蝶飞"));
以上,就是Desktop 类的使用。
谢谢!!!