2016-11-11 12 views
0

内のリソースからロードされた表示CHMファイル私はリソースからロードされたヘルプを含むCHMファイルを表示しようとしています:プロジェクトはNetBeansのから実行された場合ジャワ、瓶

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(); 
} 

、ヘルプファイルが表示されます正しく 残念ながら、プログラムがjarファイルから実行されても動作しません。例外が発生します。

私の意見では、URIで記述されたjarファイルの内部構造は認識されていません...もっと良い方法はありますか?たとえば、BufferReaderクラスを使用しますか?

JPGファイルと類似した問題は、URIに変換せずにバッファ画像クラス

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

で固定されています

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

...あなたの助けを

おかげで...

+0

.jarファイルは、異なる拡張子を持つzipファイルです。 .jarファイルのエントリ自体はファイルではなく、.jarリソースURLからFileオブジェクトを作成しようとすると*決して*動作しません。 [getResourceAsStream](http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getResourceAsStream-java.lang.String-)と[ストリームをコピーする](http:///docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#copy-java.io.InputStream-java.nio.file.Path-java.nio.file.CopyOption .. .-)を一時ファイルに追加します。 – VGR

+0

@ VGR:あなたのコメントをありがとう。残念ながら、おそらくそれはできません。プログラムはJava Web Startアプリケーションとして実行されますが、いくつかの追加の権限が必要ですか?... – justik

+0

Desktop.openを実行する権限をお持ちの場合は、[一時ファイルを作成する]( http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#createTempFile-java.lang.String-java.lang.String-java.nio.file.attribute。 FileAttribute ...-)。 – VGR

答えて

1

.jarファイルは、異なる拡張子を持つzipファイルです。 .jarファイルのエントリ自体はファイルではなく、.jarリソースURLからFileオブジェクトを作成しようとすると動作しません。あなたのヘルプコンテンツがどのようにシンプルに応じて、あなただけの単一のHTMLファイルとして保存することができ、かつ非へのリソースURLを渡し、別の方法として

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()); 

getResourceAsStreamを使用して一時ファイルにストリームをコピーします編集可能なJEditorPaneです。目次、索引、および検索が必要な場合は、JavaHelpの使用方法を学ぶことを検討してください。

+0

@ VGR、ありがとう、それは動作します...しかし、それはchmファイルを扱う一般的な方法ですか?一時ファイルよりも「ダイレクト」なアプローチはどうでしょうか? :-) – justik

+0

.jarファイルはzipアーカイブです。そのエントリは、ピリオドで区切られたファイルではありません。より直接的な方法はありません。 – VGR

+0

@ VGR:あなたの説明と忍耐のためにもう一度verzに感謝します... – justik