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

时间:2016-11-11 17:29:31

标签: 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 ...

感谢您的帮助......

1 个答案:

答案 0 :(得分:2)

<。> .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