Desktop桌面类的使用(十)

简介: Desktop桌面类的使用(十)

一. Desktop 类


Desktop 类是java的桌面类,可以启动程序,是jdk 1.6 时发布的,位于 java.awt 包下。

可以支持以下几种功能:


  1. open 打开文件
  2. edit 编辑文件
  3. print 打印文件
  4. mail 发送邮件
  5. browse 浏览器打开网址


20190422195210745.png


代码中体现为: Action 枚举。


  public static enum Action {
        OPEN,
        EDIT,
        PRINT,
        MAIL,
        BROWSE
    };


有其对应的方法


20190514184338379.png


是单例模式的, 私有构造


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();
      }
    }
  }


测试运行,便会进行访问。 默认是火狐浏览器。


20190514184915404.png


URL 时,有时候会造成 编码上的错误, 需要转换一下。


有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。


参考: https://blog.csdn.net/liuchuanhong1/article/details/70161149


20190514193140356.png


二.二 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 文件时,会报错


20190514185504504.png


二.四 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();
      }
    }
  }


测试时,会进入到


20190514185704229.png


打开打印的界面。 与点击File 菜单的打印选项 执行动作一样。


20190514185825594.png


二.五 mail 邮件发送


需要安装邮件类软件,如 火狐邮箱,office 自带的 outlook 等。


@Test
  public void testMail(){
    if(Desktop.isDesktopSupported()){ //支持桌面
      Desktop desktop=Desktop.getDesktop();
      try {
        desktop.mail();
      } catch (IOException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
      }
    }
  }


老蝴蝶没有安装这些软件,如果试图测试运行的话,会报错。


20190514190115578.png


猜想,如果安装了的话,会打开软件,进入到发送邮件的页面。

安装了一个邮件软件 Firefox .


20190514192330992.png


mail(URI uri) 这种参数的形式,约束可以查看网址:

https://www.ietf.org/rfc/rfc2368.txt


20190514191001929.png


例子有:


20190514192442474.png


测试方法为:


@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();
      }
    }
  }


20190514192646420.png


去掉单引号为:


// 要去掉 < >
desktop.mail(new URI("mailto:1290513799@qq.com?subject=测试服务器是否好用&body=两个蝴蝶飞"));


2019051419284621.png


以上,就是Desktop 类的使用。


谢谢!!!

相关文章
|
7月前
|
存储 文件存储 数据安全/隐私保护
Windows部署开源文件管理器File Browser并实现远程访问本地文件
Windows部署开源文件管理器File Browser并实现远程访问本地文件
246 1
|
7月前
|
存储 安全 搜索推荐
Windows之隐藏特殊文件夹(自定义快捷桌面程序)
Windows之隐藏特殊文件夹(自定义快捷桌面程序)
116 1
|
Shell Windows
更改windows桌面路径的教程
把桌面文件放在非C盘系统盘的好处是不会占用C盘的空间,我们知道C盘是系统盘,如果空间不够的话就会造成卡顿影响系统运行,那么这样子做的话可以给C盘减轻点负担,如果你喜欢把东西都放到桌面,我建议你这样改改试试,然后它还有一个好处就是电脑坏了,非系统盘进入PE后容易拷贝文件一点对于电脑小白来讲是件好事。
478 1
|
Web App开发 Ubuntu 安全
Parallels Desktop2023免费版mac电脑虚拟机软件下载
总之,如果你正使用Mac电脑,并且要使用其他系统平台的软件,尤其是Windows软件的话,那么使用虚拟机将会是比使用 BootCamp安装原生双系统更加方便,功能更丰富!
732 0
|
Linux
LINUX创建桌面运行快捷方式
LINUX创建桌面运行快捷方式
114 0
|
Windows
MAC远程连接Windows的远程桌面Microsoft Remote Desktop工具下载
MAC远程连接Windows的远程桌面Microsoft Remote Desktop工具下载
460 0
MAC远程连接Windows的远程桌面Microsoft Remote Desktop工具下载
|
Windows
Windows 技术篇-LDSGameMaster文件夹有什么用,删除方法
Windows 技术篇-LDSGameMaster文件夹有什么用,删除方法
769 0
Windows 技术篇-LDSGameMaster文件夹有什么用,删除方法
|
安全 关系型数据库 数据库