Index > Javaでjarに詰め込んでおいたHTMLファイルを表示する(イメージも扱う)
Wed, July 4, 2007

Javaでjarに詰め込んでおいたHTMLファイルを表示する(イメージも扱う)

Javaで書いたプログラムにヘルプをつける場合に、 そのヘルプコンテンツをHTMLで用意することがあります。

そのような場合、ヘルプ用HTMLコンテンツやそこからリンクしているイラストを すべて、jarに詰め込んでおいて プログラムから使いたくなりますが、そのためには、 ちょっとしたコツがいるので、整理しておきます。

STEP1 HTMLを表示するためのブラウザコンポーネントの用意

JavaではJEditorPaneを使うことで、簡易HTMLブラウザをつくることができます。 最新のHTML仕様には対応していませんが、HTMLで書いたヘルプコンテンツ くらいの表示には十分間に合います。

JEditorPane browser=new JEditorPane();
browser.setEditable(false);
browser.setContentType("text/html");

String helpHtmlData="<html><body>help</body></html>";
browser.setText(helpHtmlData);

STEP2 ヘルプ用HTMLコンテンツの用意

先ほどの例では、ヘルプコンテンツをコード中に直接記述していましたが、 普通は、コードと切り離して作成します。

help.html

<html>
<body>
<h1>ヘルプ</h1>
<p>
こんにちは、以下にこのツールの操作方法を説明します。
</p>
<img src="fig.gif">
</body>
</html>

jarに help.html や fig.gif を含める場合、 このHTMLの書き方ではうまくいきません。

イメージエレメントのsrc属性の指定を工夫する必要があります。

help1.html

<html>
<body>
<h1>ヘルプ</h1>
<p>
こんにちは、以下にこのツールの操作方法を説明します。
</p>
<img src="jar:file:help.jar!/fig.gif">
</body>
</html>

ポイントは、 jar:file:help.jar!/fig.gif です。
(ファイル名help.jarに help1.htmlやfig.gif を詰め込むことを前提にしています。)

STEP3 HelpBrowser.java

STEP2で作成したHTMLを読み込んで表示するためのブラウザクラスを用意します。

HelpBrowser.java

import java.io.*;
import java.awt.*;
import javax.swing.*;


public class HelpBrowser extends JFrame{

    public HelpBrowser(){
        super();

        JEditorPane browser=new JEditorPane();
        browser.setEditable(false);
        browser.setContentType("text/html");

        //String helpHtmlData="<html><body>help</body></html>";
        String helpHtmlData=getHelpData();
        browser.setText(helpHtmlData);


        //gui
        getContentPane().add(new JScrollPane(browser),BorderLayout.CENTER);
    }
    private String getHelpData(){
        try{
            String filename="help1.html";
            BufferedReader r= new BufferedReader(new InputStreamReader(
                this.getClass().getClassLoader().getResourceAsStream(filename),
                "UTF-8"
            )) ;
            String html= toString(r);
            r.close();

            return html;
        }
        catch(Exception ex){
            ex.printStackTrace();
        }

        return "";
    }
    private static String toString(BufferedReader r) throws IOException{
        StringBuffer sb=new StringBuffer();
        while(true){
            String line=r.readLine();
            if(line==null)
                break;
            sb.append(line);
        }
        return sb.toString();
    }
    public static void main(String[] s){
        JFrame f=new HelpBrowser();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(500,400);
        f.setVisible(true);
    }
}

ポイントは、getHelpData()メソッドです。
help1.htmlをjarに詰め込んでいるので、クラスローダ経由でgetResourceAsStream() メソッドを使って読み出す必要があります。

STEP4 すべてをjarにまとめる

それでは材料が揃ったので、すべてを組み立てます。

$ ls
HelpBrowser.java help1.html fig.gif

$ javac HelpBrowser.java
$ jar cf help.jar HelpBrowser.class help1.html fig.gif
$ java -cp help.jar HelpBrowser

完成

launch4jでexe化する場合の注意点

launch4jを 使って、jarをexeに含めて配布する場合は、注意が必要です。 HTML中で使用している画像がそのままでは表示されません。

表示させるには、help.jar を exe と同じフォルダに入れておく必要があります。

関連エントリー

 Twitter
follow me on Twitter
 Categories