2013-06-12 4 views
0

Основано на this solution Я получаю доступ к pdf-файлу. Код выглядит следующим образом:Почему мое java-приложение не может найти файл на usb?

editor.getMntmNewMenuItem().addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      try { 

      File pdfFile = new File("Ressources\\test.pdf"); 
      if (pdfFile.exists()) { 

       if (Desktop.isDesktopSupported()) { 
        System.out.println(pdfFile.getCanonicalPath()); 
       Desktop.getDesktop().open(pdfFile); 
       } else { 
       throw new Exception("Desktop wird nicht unterstützt!"); 
       } 
      } 
      else { 
       throw new Exception("Datei ist nichtdd vorhanden! "); 
      } 
      } catch (Exception ex) { 
       PrintWriter pw = null; 
       try { 
        pw = new PrintWriter(new File("stacktrace.txt")); 
       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       ex.printStackTrace(pw); 
       pw.append("\n\nUSER DIR: + " +System.getProperty("user.dir")); 
       pw.close(); 
      JOptionPane.showMessageDialog(editor.getContentPane(), ex.getMessage(), "Fehler", 
       JOptionPane.ERROR_MESSAGE); 
      } 

     } 
     }); 

Файл-структура выглядит следующим образом:

  1. editor.jar
  2. RESSOURCES
  3. | ----- test.pdf

Это полный стекTrace:

java.io.IOException: Не удалось открыть файл:/E: //Ressources/test.pdf. Сообщение об ошибке: система не может найти указанный файл.

at sun.awt.windows.WDesktopPeer.ShellExecute(Unknown Source) 
at sun.awt.windows.WDesktopPeer.open(Unknown Source) 
at java.awt.Desktop.open(Unknown Source) 
at iscms.ISCMS$2$20.actionPerformed(ISCMS.java:877) 
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
at javax.swing.AbstractButton.doClick(Unknown Source) 
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source) 
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source) 
at java.awt.Component.processMouseEvent(Unknown Source) 
at javax.swing.JComponent.processMouseEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$200(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
    USER DIR: = E:\ 

Это отлично работает на моем компьютере и в затмении, но на мой USB флэшки он не работает. По какой-то причине я получаю исключение IOException. Что мне не хватает?

+2

В чем проблема 'IOException'? Отправьте сообщение и полную трассировку стека. – unholysampler

+0

Также напечатайте 'System.getProperty (« user.dir »)' в каждом случае ... – SJuan76

+0

Привет, спасибо за ваши ответы! Добавлена ​​трассировка стека и результат System.getProperty («user.dir»). – Alex

ответ

0

Решение на самом деле работает. Я больше не использую относительный путь, вместо этого я использую System.get.property("user.dir"). Я не знаю, хорошо это и чисто, но зачем жаловаться, если это работает? Он не отвечает на вопрос, но он, безусловно, решил мою проблему.

 editor.getMntmNewMenuItem().addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      try { 
      String userDir=System.getProperty("user.dir"); 
      File pdfFile = new File(userDir+"\\Ressources\\test.pdf"); 
      if (pdfFile.exists()) { 

       if (Desktop.isDesktopSupported()) { 
       Desktop.getDesktop().open(pdfFile); 
       } else { 
       throw new Exception("Desktop wird nicht unterstützt!"); 
       } 
      } 
      else { 
       throw new Exception("Datei ist nicht vorhanden! "); 
      } 
      } catch (Exception ex) { 
JOptionPane.showMessageDialog(editor.getContentPane(), ex.getMessage(), "Fehler", 
       JOptionPane.ERROR_MESSAGE); 
      } 

     } 
     }); 
Смежные вопросы