返回

Desktop桌面类的使用(十)

发布时间:2022-11-14 15:14:28 263
# less# java# 服务器# 软件# 软件

忽然发现,游戏并没有那么好玩,真正好玩的是什么? 人心。 而如何避免别人玩弄你的心,那就是让别人不敢玩弄你的心,代价是付不起的。 人神之恋,开始了。

一. Desktop 类

Desktop 类是java的桌面类,可以启动程序,是jdk 1.6 时发布的,位于 java.awt 包下。
可以支持以下几种功能:

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

    代码中体现为: Action 枚举。
public static enum Action {
OPEN,
EDIT,
PRINT,
MAIL,
BROWSE
};

有其对应的方法

Desktop桌面类的使用(十)_java

 

是单例模式的, 私有构造

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
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}

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

 

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

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

 

Desktop桌面类的使用(十)_Desktop 类的使用_02

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

Desktop桌面类的使用(十)_Desktop 类的使用_03

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

测试时,会进入到

Desktop桌面类的使用(十)_自动生成_04

 

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

Desktop桌面类的使用(十)_java_05

二.五 mail 邮件发送

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

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

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

Desktop桌面类的使用(十)_desktop_06

 

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

安装了一个邮件软件 Firefox .

Desktop桌面类的使用(十)_desktop_07

 

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

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

Desktop桌面类的使用(十)_java_08

 

例子有:

Desktop桌面类的使用(十)_mailto 的使用_09

 

测试方法为:

@Test
public void testMail(){
if(Desktop.isDesktopSupported()){ //支持桌面
Desktop desktop=Desktop.getDesktop();
try {
try {
// desktop.mail(new URI("mailto:subject='测试服务器是否好用'&body='两个蝴蝶飞'"));
// '' 会当成内容,所以应该去除。
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} catch (URISyntaxException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}

 

去掉单引号为:

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

以上,就是Desktop 类的使用。
谢谢!!!

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线