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 类的使用。


谢谢!!!

相关文章
|
存储 分布式计算 安全
Hbase集群搭建超详细教程
分享一下HBase 集群搭建的详细过程
1656 0
|
9月前
|
人工智能
RT-DETR改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)
RT-DETR改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)
247 1
|
12月前
|
监控 Java 开发者
监控堆外JVisualVM工具
监控堆外JVisualVM工具
222 2
|
12月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的慢查询日志
MySQL的慢查询日志用于记录执行时间超过设定阈值的SQL语句,帮助数据库管理员识别并优化性能问题。通过`mysqldumpslow`工具可查看日志。本文介绍了如何检查、启用及配置慢查询日志,并通过实例演示了慢查询的记录与分析过程。
637 3
|
关系型数据库 MySQL Linux
【clickhouse】在CentOS中离线安装clickhouse
【clickhouse】在CentOS中离线安装clickhouse
745 1
|
缓存 JavaScript API
Flutter&鸿蒙next 状态管理框架对比分析
在 Flutter 开发中,状态管理至关重要,直接影响应用的性能和可维护性。本文对比分析了常见的状态管理框架,包括 setState()、InheritedWidget、Provider、Riverpod、Bloc 和 GetX,详细介绍了它们的优缺点及适用场景,并提供了 Provider 的示例代码。选择合适的状态管理框架需考虑应用复杂度、团队熟悉程度和性能要求。
579 0
|
SQL Java 数据库连接
JavaWeb基础3——Maven基础&MyBatis
构建工具Maven、Maven安装配置、基本使用、IDEA使用Maven、依赖管理、插件、Mybatis、核心配置文件mybatis-config.xml、Mapper代理开发、配置文件实现增删改查、Mybatis参数传递、注解实现增删改查
JavaWeb基础3——Maven基础&MyBatis
|
Linux KVM 虚拟化
在Linux中,什么是虚拟化?并且列出常见的虚拟化技术。
在Linux中,什么是虚拟化?并且列出常见的虚拟化技术。
基于kalman滤波的UAV三维轨迹跟踪算法matlab仿真
本文介绍了一种使用卡尔曼滤波(Kalman Filter)对无人飞行器(UAV)在三维空间中的运动轨迹进行预测和估计的方法。该方法通过状态预测和观测更新两个关键步骤,实时估计UAV的位置和速度,进而生成三维轨迹。在MATLAB 2022a环境下验证了算法的有效性(参见附图)。核心程序实现了状态估计和误差协方差矩阵的更新,并通过调整参数优化滤波效果。该算法有助于提高轨迹跟踪精度和稳定性,适用于多种应用场景,例如航拍和物流运输等领域。
931 12
|
JavaScript Linux 编译器
c++开源协程库libgo介绍及使用
c++开源协程库libgo介绍及使用