java.awt.Desktop.open不’;不能使用PDF文件吗?
看起来我无法在PDF文件上使用Desktop.open(),无论位置如何。下面是一个小测试程序:java.awt.Desktop.open不’;不能使用PDF文件吗?,java,desktop,Java,Desktop,看起来我无法在PDF文件上使用Desktop.open(),无论位置如何。下面是一个小测试程序: package com.example.bugs; import java.awt.Desktop; import java.io.File; import java.io.IOException; public class DesktopOpenBug { static public void main(String[] args) { try {
package com.example.bugs;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
public class DesktopOpenBug {
static public void main(String[] args)
{
try {
Desktop desktop = null;
// Before more Desktop API is used, first check
// whether the API is supported by this particular
// virtual machine (VM) on this particular host.
if (Desktop.isDesktopSupported()) {
desktop = Desktop.getDesktop();
for (String path : args)
{
File file = new File(path);
System.out.println("Opening "+file);
desktop.open(file);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
如果我使用参数c:\tmp\zz1.txt c:\tmp\zz.xml c:\tmp\ss.pdf
(我碰巧有3个文件)运行DesktopOpenBug,我会得到以下结果:(.txt和.xml文件打开得很好)
到底发生了什么事?我正在运行WinXP,我可以在命令提示符下键入“c:\tmp\ss.pdf”,它会很好地打开
编辑:如果这是一个示例,请投票支持。多痛苦啊(如果切换片段的顺序,是否会导致其他某个文件出现相同的错误。我想知道在调用文件构造函数之前是否需要修剪路径的末尾
嗯……是的,忽略这个……检查。
open
抛出IO异常“如果指定的文件没有关联的应用程序,或者关联的应用程序无法启动”……也可以从页面顶部…“注册、访问和启动关联的应用程序的机制取决于平台。”
桌面类的代码: open方法调用
DesktopPeer.open
Desktopper源:
DesktopPeer是特定于实现的
以下是特定于Windows的实现的源代码:
open->ShellExecute->(本机)ShellExecute
NativeShellExecute
是Win32ShellExecute
的包装器。以下是有关该函数的信息。
我的建议是自己编写ShellExecute函数的实现。这是一个源代码,来自某个执行该函数的人。直到最近通过这篇文章,我才知道这个桌面命令:
以前我一直在使用:
Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+ myfile);
这对我来说一直很有效。如果你的方法不起作用,也许你可以考虑试试这个命令。你真的应该编辑你的原始问题,而不是创建一个新的问题。编辑的内容足够多,我决定投票关闭我的原始问题并打开一个新的问题。这个问题与UNC路径无关,并且是唯一的问题nswer我必须处理UNC路径和空间。事实上,更好的是:我删除了旧问题,因为它在这一点上没有任何价值。嗯…是的,忽略它…检查此链接…open会引发IO异常“如果指定的文件没有关联的应用程序或关联的应用程序无法启动”…也从页面顶部。。。“注册、访问和启动关联应用程序的机制取决于平台。”PDF文件在我的计算机上有关联的应用程序,我不知道如何调试正在发生的事情。它所说的只是“参数不正确”,听起来像是Microsoft COM/ActiveX错误。它有帮助,但仅在Windows上。(我同时使用MacOS和Windows。)
Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+ myfile);