Java Загрузить PDF файл не существует

Я пытаюсь, чтобы приложение Java открывало файл PDF, когда пользователь нажимает кнопку. Тем не менее, я получаю трассировку стека ниже, утверждая, что файл не существует. В основном я хотел бы иметь возможность загружать этот файл, когда пользователь делает выбор.

Ниже у меня будет трассировка стека, затем код и скриншот пути.

Трассировки стека:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: The file: \RFBase-TD_Communications\src\pdf\RFTDAnalyzerHelpFile.pdf doesn't exist.
    at java.awt.Desktop.checkFileValidation(Unknown Source)
    at java.awt.Desktop.open(Unknown Source)
    at GUI.rfbgui.openPDF(rfbgui.java:787)
    at GUI.rfbgui.access$7(rfbgui.java:773)
    at GUI.rfbgui$6.actionPerformed(rfbgui.java:921)
    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)

Код:

private static void openPDF()
{
    File pdfHelpFile = new File("/RFBase-TD_Communications/src/pdf/RFTDAnalyzerHelpFile.pdf");
    try
    {
        Desktop.getDesktop().open(pdfHelpFile);

    }catch(IOException ex)
    {
        ex.printStackTrace();
    }
}

2 ответа

Решение

У меня есть несколько общих советов о том, как справиться с этими ситуациями. Файлы были одной из вещей, которые меня очень расстроили, когда я начал учиться программировать.

  1. Использовать System.getProperty("user.dir"); Это может быть очень полезно, особенно если вы не знаете, откуда будет запускаться программа, или у вас есть определенная файловая структура.

  2. В Java я обычно рекомендую использовать "\" вместо "/".

  3. Запустите проверку работоспособности файла, который вы пытаетесь загрузить. В частности, проверьте, имеет ли оно значение null, .isFile() и т. Д. Вы никогда не знаете, что вы можете получить, так что лучше взять пик, прежде чем случайно завершить работу вашей программы.

Вот несколько ссылок на похожие вопросы, которые могут вам помочь;

Как мне загрузить файлы в мое Java-приложение?

Получение текущего рабочего каталога в Java

Получение входного потока из ресурса classpath (файл XML)

File myFile = new File(getClass().getResource("/files/test.pdf").toURI());

или же

if (Desktop.isDesktopSupported()) {
try {
    File myFile = new File("/path/to/file.pdf");
    Desktop.getDesktop().open(myFile);
} catch (IOException ex) {
    // no application registered for PDFs
}
Другие вопросы по тегам