Я пытаюсь отобразить файл CHM, содержащий справку, которая загружается из ресурсов:Java, дисплей CHM файл, загруженный из ресурсов в банке
try
{
URL url = this.getClass().getResource("/resources/help.chm");
File file = new File(url.toURI());
Desktop.getDesktop().open(file); //Exception
}
catch (Exception e)
{
e.printStackTrace();
}
Когда проект запускается из NetBeans, отображается файл справки правильно. К сожалению, это не работает, когда программа запускается из файла jar; это приводит к исключению.
На мой взгляд, внутренняя структура банки, описанная URI, не была распознана ... Есть ли лучший способ? Например, используя класс BufferReader?
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
Аналогичная проблема с файлом в формате JPG было исправлено с BufferedImage класса
BufferedImage img = null;
URL url = this.getClass().getResource("/resources/test.jpg");
if (url!= null)
{
img = ImageIO.read(url);
}
без какого-либо преобразования в URI ...
Спасибо за вашу помощь ...
Файл .jar - это zip-файл с другим расширением. Запись в файле .jar сама по себе не является файлом, и попытка создать объект File из URL-адреса ресурса .jar будет * никогда * работать. Используйте [getResourceAsStream] (http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getResourceAsStream-java.lang.String-) и [скопируйте поток] (http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#copy-java.io.InputStream-java.nio.file.Path-java.nio.file.CopyOption .. .-) во временный файл. – VGR
@ VGR: Спасибо за ваш комментарий. К сожалению, этого, вероятно, не может быть сделано. Программа будет запущена как приложение Java Web Start, некоторые дополнительные права будут необходимы (или нет?) ... – justik
Если у вас есть разрешение на выполнение Desktop.open, я думаю, у вас будет разрешение на создание временного файла (http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#createTempFile-java.lang.String-java.lang.String-java.nio.file.attribute. FileAttribute ...-). – VGR