2015-10-01 3 views
1

У меня есть приложение Java, и у меня есть руководство пользователя, которое доступно для пользователей, которое является источником моей программы.Не удается открыть PDF после сборки maven

Мой проект построен с Maven, у меня есть несколько проектов. В моем проекте GUI у меня есть userManual.pdf по следующему пути: src \ main \ resources \ userManual \ userManual.pdf

В среде Eclipse IDE запускаю мой основной проект, и когда я нажимаю на кнопку руководства пользователя, Файл PDF будет открыт. Но когда я создаю свой проект, у меня есть внутренняя ошибка Runtime в панели параметров: Произошла внутренняя ошибка (Файл:. \ UserManual \ userManual.pdf не существует.). Приложение, скорее всего, находится в неудовлетворительном состоянии, поэтому выход nox не будет.

Мой код:

File manual = new File(ManualBar.class.getClassLoader().getResource("./userManual/userManual.pdf").getPath()); 

try { 
    Desktop.getDesktop().open(manual); 
} catch (IOException e1) { 
    JOptionPane.showInputDialog(null, 
           "The user manual is not available", 
           "User manual is missing", 
           JOptionPane.INFORMATION_MESSAGE); 
} 

Я думаю, что я не называю правильно мой Ressource или это не в нужном месте.

+0

Попробуйте изменить в '/ UserManual/userManual.pdf' (без начальной точки) – Tunaki

+0

Я уже проверил это и это не работает. – Fred37b

+0

Вы фильтруете свои ресурсы по конфигурации в вашем файле pom? – khmarbaise

ответ

2

Вы не можете получить доступ к ресурсу внутри банки как к экземпляру File. Он работает в вашей среде IDE, потому что Eclipse распаковывает все, что находится во временной папке, поэтому ресурс является фактическим файлом в файловой системе. Однако при упаковке внутри банки это не File.

Поскольку метод Desktop.open требует File объекта, вы должны получить InputStream вашего ресурса, скопируйте его в File во временной папке и открыть этот новый файл.

Использование Java 7, это можно записать в виде:

Path tempFile = Files.createTempFile(null, ".pdf"); 
try (InputStream is = getClass().getResourceAsStream("/userManual/userManual.pdf")) { 
    Files.copy(is, tempFile, StandardCopyOption.REPLACE_EXISTING); 
} 
Desktop.getDesktop().open(tempFile.toFile()); 
+0

Когда я запускаю в Eclipse IDE, у меня есть исключение: java.nio.file.FileAlreadyExistsException: C: \ Users \ fred37b \ AppData \ Local \ Temp \ 1488624516076161268.tmp Я пытаюсь построить в maven сейчас – Fred37b

+0

@ Fred37b Просмотреть мое редактирование, вы можете добавить StandardCopyOption.REPLACE_EXISTING, но я не думаю, что это необходимо, так как новый временный файл будет создан каждый раз – Tunaki

+0

даже с Files.copy (is, tempFile, StandardCopyOption.REPLACE_EXISTING), у меня есть IOException, что он набрасывает метод tempFile.toFile() – Fred37b