1

関連するプログラムで渡されるファイルを開くことになっている次のメソッドがあります。ほとんどのファイルで機能しますが、ビデオまたは音楽ファイルを渡すjava.io.IOException: Failed to open file:/C:/8GB/Bruno%20Mars%20-%20It%20will%20rain.mp3. Error message: Access is denied.と、(たとえば) 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 を使用しています...

4

2 に答える 2

2

州の文書、それ:Desktop.open(File)

スロー: IOException-指定されたファイルに関連付けられたアプリケーションがない場合、または関連付けられたアプリケーションの起動に失敗した場合

別のアプリケーションを問題のファイルに関連付けてみて、それが機能するかどうかを確認してください。また、「Windowsイベントログ」をチェックして、WMPを開いたときにクラッシュする可能性があるかどうかを確認してください。


別の方法(少なくともWindowsでは機能します)は、Runtime.exec(String)-methodとstart [file]-commandを使用して、関連するアプリケーションで指定されたファイルを開始することです。

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

:パスにスペースが含まれている場合は、パスを二重引用符で囲んでください(文字列でエスケープする必要があります)。また、円記号は文字列のエスケープ文字であるため、これもエスケープする必要があります。

また、この方法では、特定のファイルタイプにアプリケーションが割り当てられていない場合に、「適切なアプリケーションの選択」ダイアログが開くことに注意してください。

于 2012-08-07T15:01:11.587 に答える