Java - Desktop.open() 无法打开视频或音乐

标签 java file windows-7 desktop

我有以下方法应该打开在相关程序中传递的文件。它适用于大多数文件,但如果我传递任何视频或音乐文件,它会打印 java.io.IOException: Failed to open file:/C:/8GB/Bruno%20Mars%20-%20It%20will%20rain.mp3 .错误消息:访问被拒绝。(例如)并且不打开文件,即使它与 Windows Media Player 相关联也是如此!

private static void openFileinAssociate(File toOpen){
        // Open it using the operating system/environment
        Desktop environment = Desktop.getDesktop();
        if(toOpen.exists()){
            if(!toOpen.isDirectory())
                try{
                    environment.open(new File(toOpen.getAbsolutePath()));
                }catch(Exception ex){
                    ex.printStackTrace();
                    JOptionPane.showMessageDialog(null, "An error occured whilst trying to open the file.", applicationName, JOptionPane.ERROR_MESSAGE);
                }
        }
}

这里是请求的堆栈跟踪的其余部分。不过,我真的可以再发布实际代码了,抱歉。

at sun.awt.windows.WDesktopPeer.ShellExecute(WDesktopPeer.java:77)
at sun.awt.windows.WDesktopPeer.open(WDesktopPeer.java:54)
at java.awt.Desktop.open(Desktop.java:272)
at main.GraphicUI.openFileinAssociate(GraphicUI.java:1930)
at main.GraphicUI.access$12(GraphicUI.java:1924)
at main.GraphicUI$17.mouseReleased(GraphicUI.java:837)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

我使用的是 Windows 7 并且我有最新版本的 Java...

最佳答案

documentation Desktop.open(File) 声明:

Throws: IOException - if the specified file has no associated application or the associated application fails to be launched

尝试将另一个应用程序与有问题的文件相关联,看看是否可行。此外,检查“Windows 事件日志”以查看 WMP 在打开时是否可能崩溃。


另一种方法(至少适用于 Windows)是使用 Runtime.exec(String) -方法和 start [file]-command 启动给定文件及其关联的应用程序。

Runtime.exec("start \"C:\\Your\\Path with spaces\\file.whatever\"");

注意:当你的路径中有空格时,将路径放在双引号中(需要在字符串中进行转义)。此外,由于反斜杠是字符串的转义字符,因此也需要对其进行转义。

另请注意,如果没有为给定文件类型分配的应用程序,此方法将打开“选择适当的应用程序”对话框。

关于Java - Desktop.open() 无法打开视频或音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845290/

相关文章:

python - 在 Python 中存储超过 9,000 位的大数字

Python:查找并替换文件中的数字序列

java - 包 <blah> 不存在错误 - NetBeans 6.8 和 Windows 7

java - 每晚构建——我们是否先删除 "target"中的文件?

java - 如何让 Java 托盘图标消息淡出?

java - 如何将 JsonString 转换为 String?

windows-7 - 缺少 Microsoft 进度条控件

python - 'easy_install' 不是内部或外部命令、可运行程序或批处理文件

java - Spring Data JPA 查询返回重复行而不是实际数据,为什么?

java - 可以在 Java 中使用 String 数据类型作为时间戳吗?