Java,显示从jar中的资源加载的chm文件

标签 java resources chm

我正在尝试显示包含从资源加载的帮助的 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类?

BufferedReader in = new BufferedReader( new InputStreamReader(url.openStream()));

BufferedImage 类已修复 jpg 文件的类似问题

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 传递到不可编辑的 JEditorPane。如果您想要目录、索引和搜索,您可能需要考虑学习如何使用 JavaHelp .

关于Java,显示从jar中的资源加载的chm文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40553235/

相关文章:

java - 我的vps有足够的内存,但vm无法运行

resources - 在 VSIX 容器中附加文件

c# - 如何使用 C# WPF 打开 chm 文件中的特定页面

c++ - 如何在 x64 平台上使用 HTMLHelpCtrl.ocx ActiveX 控件

c# - 实现应用程序 HTML 帮助系统

java - 访问集合中的数据

java - Cassandra 架构

java - 使用 Spring Security 进行跨域资源共享

linux - alsa:如何使用它的名称而不打开它以编程方式查找设备是否忙/正在使用

python - 在 Windows 中限制 python 脚本 RAM 使用