簡體   English   中英

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類?

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文件中的條目本身並不是文件,因此嘗試從.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM