今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

InstallShield MultiPlatform Edition 4.0

EULA に localFile の内容を表示しようとするが、SJIS だと UNIX で化けるし、EUC にすると Windows で化ける。んなあほな。なんのための MultiPlatform Edition かいな。OS に合わせたエンコードで表示してくださいよ、と思いつつ、JISとUNICODEで試すも両方ともアウト。
しかたなく textProperty にしてみる。とりあえず簡単な文字列で試す。結果はOK。インストーラでもきちんと表示した。
次は、EULA全体を textProperty で返すように変更する。EULA のメンテナンスを考慮して、jar ファイルに HTML形式の EULA を同梱しておき、getResourceAsStream() で読むことにする。

リソースを定義したクラスの static initializer で読もうとするが、できない。getResourceAsStream() はClassクラスのメソッドなので、static initializer でもいけると思ったが、

class Hoge extends ListResourceBundle {
    static {
        InputStream is = Hoge.class.getResrouceAsStream();
    }
}

としても、InputStream が null になっている。
しかたなく、コンストラクタの中で読み込むようにする。

class Hoge extends ListResourceBundle {
    static String eula;
    Hoge(){
        InputStream is = getClass().getResourceAsStream();
            :
        eula = ...;
    }
}

手抜きテストを書いてみる。

class Hoge extends ListResourceBundle {
    static String eula;
    Hoge(){
        InputStream is = getClass().getResourceAsStream();
            :
        eula = ...;
    }
    public static void main(String args[]){
        new Hoge();
        System.out.println(eula);
    }
}

コンソールにだらだらと EULA が出力された。
jar ファイルにして、その jar ファイルを InstallShield の CLASSPATH に追加し、インストーラを生成。
できたインストーラを起動。
ん?タイトルバーに何も出てない。
EULA を確認すると画面が真っ白。EULAの部分だけじゃなくて、jar ファイル内に定義した文字列、全部空文字列になっとる。。。
はあ、疲れた。帰ろう。