当前位置: 首页 > 知识库问答 >
问题:

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

龙飞文
2023-03-14

我试图显示包含从资源加载的帮助的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()));

BuffereImage类修复了jpg文件的类似问题

BufferedImage img = null;
URL url = this.getClass().getResource("/resources/test.jpg");
if (url!= null)
{
     img = ImageIO.read(url);
}

没有任何转换到URI。。。

谢谢你的帮助...

共有1个答案

杜俭
2023-03-14

A.jar文件是一个具有不同扩展名的zip文件。一个项目中的一个项目。jar文件本身不是一个文件,正在尝试从文件创建一个文件对象。jar资源URL永远不会工作。使用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());

另一种选择是,根据帮助内容的简单程度,您可以将其存储为单个超文本标记语言文件,并将资源URL传递给不可编辑的JEditorPane。如果您想要一个目录、索引和搜索,您可能需要考虑学习如何使用Javahelp。

 类似资料:
  • 在使用Maven捆绑JAR文件中的资源时,我有一种感觉,我错过了一些关键的东西。我的目录结构是标准的Maven结构(即\src\main\java,\src\main\Resources)。 使用IDE时,我将资源文件引用为\main\resources\images\blah。。。它工作得很好,但当Maven捆绑JAR文件时,它会将路径放在相对于根的位置(“\ images\blah”),因此没

  • 我在maven项目的src/main/resource文件夹中下载了.sh文件,我正在通过下面的代码阅读它 如果我使用jar EX作为应用程序运行:- java-jar runscript.jar SCHEMA_NAME /users/ideaprojects/runscript/target/file:/users/ideaprojects/runscript/target/runscripts

  • 问题内容: 当使用并提供一个相当通用的资源名称(如)时,Java可能会从CLASSPATH前面列出的另一个JAR文件中加载资源,但可能与我的应用程序完全无关。有没有一种方法可以强制ClassLoader 首先 尝试从我的课程所在的同一JAR文件中加载资源,并且只有在未找到的情况下,才可以在CLASSPATH上查找其他JAR? 问题答案: 另外,如果您知道文件所在的确切jar,则可以使用JarURL

  • 问题内容: 在我的应用程序中,我以这种方式加载资源: 这给了我: 当我从IDE运行我的应用程序时,但是当我运行应用程序的jar时,这可以很好地工作: 路径变为: 有什么办法解决这个问题? 我将使用“存储库”目录名称来创建此目录: 以相同的方式,我将获得一个文件名(而不是目录),并以这种方式使用它: 问题答案: 听起来你正在尝试使用或类似方法加载资源。不要那样做:不要调用,而是从中调用并读取数据。

  • 问题内容: 我需要从罐子中加载属性文件。该罐子包含在war文件中。这是结构 现在,我在一个servlet中编写了以下代码,如下所示: 但是上面的代码我得到流为空。如果我将属性文件放在ROOT.war / WEB- INF中,则可以正常工作。我有一个不错的主意,如果getResourceAsStream中的路径以“ /”开头,那么它将在上下文根目录中搜索资源。但是,如何读取位于jar的资源,该jar