Java,显示从jar资源中加载的chm文件
Java, display chm file loaded from resources in jar
我正在尝试显示包含从资源加载的帮助的 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描述的jar内部结构没有被识别...有什么更好的办法吗?例如,使用 BufferReader class?
BufferedReader in = new BufferedReader( new InputStreamReader(url.openStream()));
BufferedImage 修复了 jpg 文件的类似问题 class
BufferedImage img = null;
URL url = this.getClass().getResource("/resources/test.jpg");
if (url!= null)
{
img = ImageIO.read(url);
}
没有任何转换为 URI...
感谢您的帮助...
.jar 文件是具有不同扩展名的 zip 文件。 .jar 文件中的条目本身不是文件,尝试从 .jar 资源 URL 创建 File 对象将永远行不通。使用 getResourceAsStream 并将流复制到临时文件:
Path chmPath = Files.createTempFile(null, ".chm");
try (InputStream chmResource =
getClass().getResourceAsStream("/resources/help.chm")) {
Files.copy(chmResource, chmPath,
StandardCopyOption.REPLACE_EXISTING);
}
Desktop.getDesktop().open(chmPath.toFile());
作为替代方案,根据您的帮助内容的简单程度,您可以将其存储为单个 HTML 文件,然后将资源 URL 传递给非 editable JEditorPane。如果您想要 table 的内容、索引和搜索,您可能需要考虑学习如何使用 JavaHelp。
我正在尝试显示包含从资源加载的帮助的 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描述的jar内部结构没有被识别...有什么更好的办法吗?例如,使用 BufferReader class?
BufferedReader in = new BufferedReader( new InputStreamReader(url.openStream()));
BufferedImage 修复了 jpg 文件的类似问题 class
BufferedImage img = null;
URL url = this.getClass().getResource("/resources/test.jpg");
if (url!= null)
{
img = ImageIO.read(url);
}
没有任何转换为 URI...
感谢您的帮助...
.jar 文件是具有不同扩展名的 zip 文件。 .jar 文件中的条目本身不是文件,尝试从 .jar 资源 URL 创建 File 对象将永远行不通。使用 getResourceAsStream 并将流复制到临时文件:
Path chmPath = Files.createTempFile(null, ".chm");
try (InputStream chmResource =
getClass().getResourceAsStream("/resources/help.chm")) {
Files.copy(chmResource, chmPath,
StandardCopyOption.REPLACE_EXISTING);
}
Desktop.getDesktop().open(chmPath.toFile());
作为替代方案,根据您的帮助内容的简单程度,您可以将其存储为单个 HTML 文件,然后将资源 URL 传递给非 editable JEditorPane。如果您想要 table 的内容、索引和搜索,您可能需要考虑学习如何使用 JavaHelp。