Javaアプレット版KISS

更新履歴

2008-12-18

object要素使用の設置例にHTML5準拠のものを追加し、サンプルを差し替え。

2008-12-16

Google Chromeについて追記。applet要素使用のサンプルを追加。その他細かい修正。

2005-11-09

WindowsのInternet Explorerでobject要素によるロードがサポートされなくなった件を追記。

2003/07/01

Safari/Microsoft VMについての追記。その他細かい修正。

2003/01/26

セキュリティ情報を更新してページを分離。

2002/12/14

セキュリティ情報を更新。

2002/05/02

Macintosh版のInternet Explorer 5.1.4はめでたくobject要素でのJavaアプレット使用を認識するようになっていたので見直し。他にいくつか追記。

2002/04/30

v0.20aに更新。

Exceptionでコケないよう各種エラーチェックを強化。

2002/04/29

v0.20に更新。

2002/04/09
2002/04/04
2002/01/03
2000/04/14

XHTML 1.1のProposed Recommendition、Netscape Communicator 4.77、IE 6.0βのリリースに合わせてページの見直し。

2000/08/27

v0.10cに更新。

2000/07/16

.jarのMIMEタイプがtext/plainになっていたためNetscapeでダウンロードするとブラウザの画面に表示されたりファイルが壊れたりすることがあったのを修正。

サンプル

特長

(2002/04/29) v0.20からコメント機能に対応しました。

(2000/05/26) v0.10からfkissに対応しました。yavさんのfkiss v0.28のソースをほぼ忠実にJavaへ移植しています。ただし以下の点で本家fkissとは異なります。

また現時点では以下の制限があります。

sound

再生可能な音声ファイルの形式はJava VMの実装に依存します。JDK 1.1までは.au形式(audio/basic)しか再生できません。Java 2からは.wav(audio/wave)や.aiff(audio/aiff)や.mid(audio/midi)にも対応しましたが、いまのところ(2000/05/26)Java 2対応のブラウザはNetscape 6か、インストール時にJava 2のVMを指定したHotJavaくらいしかありません。(2002/04/05)JRE 1.3.1_01a以降をインストールすることで、IEでもJava 2のVMが使えます。(2002/04/09)Netscape Communicator 4.78でも使えるようです。

shell

いちおう実装していますが、セキュリティの関係上ブラウザ上では実行できません。AppletViewerではセキュリティの設定次第で実行できるかもしれません。

quit

セキュリティ上の理由でブラウザ上のアプレットはSystem.exit()を使えないため、実装していません。

windowsize

アプレットの表示領域のサイズを変更しようとしますが、実際に変更できるかどうかはブラウザに依存します。いまのところ変更可能なのはiCabとWindows版のIE4以降だけです(IEの場合はさらにobject要素を使う必要がある)。

(2000/05/26) v0.10からlzh_nameパラメータに複数の値を指定できるようになりました。以下のように指定します。

<applet code="Fkiss" archive="fkiss.jar" width=640 height=430>
<param name="lzh_name" value="pk_pnkd2.lzh,pk_pnkd1.lzh,pk_pnk03.lzh">
<param name="cnf_name" value="KISS.CNF">
<p><a href="http://www.alles.or.jp/~pyon/">pyonさん</a>のキャロットハウス着せ替えセットです。</p>
</applet>

指定は追加セット→基本セットの順に行います。複数の追加セットがある場合は、新しく追加された順に指定します。KISSLDや本家DOS版KISSのコマンドラインと指定の順番が逆である点に気をつけてください。

LZH直視が可能です。ダウンロード用のアーカイブと全く同じものをデータとして使えるので、Webサーバのディスク使用量を節約できます。また多数のHTTPコネクションを張る必要がないので高速になります。

ただし、LZHファイルを先頭から1回しか読み込まない関係上、セルファイルの拡張子は.cel、パレットファイルの拡張子は.kcfまたは.ccbでなくてはなりません。LZH直視をしない場合にはこの制限はありません。

LZHファイルの展開処理には、しんき氏のLHACCESSライブラリをJavaへ移植したものを使っています。

JDK 1.0相当の機能しか使っていないので、Javaアプレット対応なら理論上はどんなブラウザ上でも動くはずです。v0.01系はJDK 1.0.2/1.1.8/Java 2 SDK 1.2.2/1.3のそれぞれに付属のAppletViewer、HotJava 3.0、WindowsのNetscape Navigator 2.02/3.01[ja]/Communicator 4.7/6.0 PR1 (4/6現在、英語版でないとJavaを含んだインストールはできません)、IE 3.02/5.01、MacのNetscape Communicator 4.5、IE 4.5 (+ MRJ 2.1.4/+ Microsoft VM)/5.0、iCab Pre 1.9aで動作を確認しています。またWindowsのIEとNetscapeに関しては、Java Plug-inでの動作も確認しています。

v0.10系はJDK 1.2.2/1.3付属のAppletViewer、IE 5.5(Win)、Netscape 4.7(Win)、iCab Pre 1.9a (+ MRJ)で確認しています。JDK 1.0な環境でも動くとは思いますが、もし動かなかった場合は教えてください。気が向いたら対処します。

v0.20系はJDK 1.1.8/1.0.2の付属のAppletViewer、Internet Explorer 6(Win) + Microsoft VM Build 3805、Netscape Communicator 4.78(Win)Mozilla 0.9.8(Win) + JRE 1.3.1_02、Internet Explorer 5.1.4(Mac) + MRJ 2.2.5、Netscape Communicator 4.79(Mac)で確認しています。

ckissのフルカラーセルにも対応しています。ただし半透明のピクセルがどのように表現されるかはJava VMの実装に依存します。

(2002/04/29) v0.20から、半透明合成をすべて自前で行うようになったので、VMに依存することなく完全な半透明で表示されるようになりました。

%tによる透明度の指定をサポートしています。ただし半透明のセルがどのように表現されるかはJava VMの実装に依存します。

(2002/04/29) v0.20から、半透明合成をすべて自前で行うようになったので、VMに依存することなく完全な半透明で表示されるようになりました。

パレットの総数に制限はありません。つまり256色マルチパレットに対応しています。

操作方法

マウスで服をつかんで、ドラッグ アンド ドロップで着せ替えできます。簡単には動かない部品もありますが、愛と情熱を持ってがんばれば、なんとかなるかもしれません?

右上の箱(2段に並んでいる場合は上の段)をクリックするか、1〜0のキーを押すことでセットを切り替えられます。セットが1つしかない場合は表示されません。

右上の箱(2段に並んでいる場合は下の段)をクリックするか、Alt+1〜0のキーを押すことでパレット組を切り替えられます。パレット組が1つしかない場合(最近のデータはほとんどがそう)は表示されません。Macintoshでは、とりあえずInternet Explorer 4.5 + MRJで試した限りでは、Alt+数字キーに対応するキー操作を見つけられませんでした。ご存知の方がいらっしゃいましたらぜひ教えてください

アプレットがフォーカスを持った状態でなくてはキー操作は効きません。

ダウンロード

.jarをダウンロードするとファイル名の拡張子が.zipになってしまう場合がありますが、ファイルサイズが合っていれば中身はおそらく正常です。ファイル名を正しくリネームしてお使いください。

設置方法

  1. KISSデータを作成します。ふつうのローダで動作を確認しておいたほうがいいでしょう。

  2. jarファイルをダウンロードします。fkiss命令を使う場合はfkiss.jarが必要です。fkiss命令を使うデータがない場合はkiss.jarにすると、わずかにサイズを節約できます。

  3. 1.で作ったKISSデータと、2.でダウンロードしたkiss.jarかfkiss.jarを同じフォルダに入れます。

    古いブラウザに対応させる場合には、jarファイルを解凍してすべてのclassファイルも同じフォルダに置いてください(ただしjarファイルを置くのも忘れないでください。さもないとInternet Explorer(Win)でフリーズする可能性があります)。jarは圧縮方式としてはZIPそのものなので、LhasaやWinZipなどのZIP対応アーカイバで解凍できます。

    Java Plug-inはすべてのバージョンがjarに対応しているので、Java Plug-inを使う場合はclassファイルは不要です。object要素によるJavaアプレットのロードに対応したブラウザもすべてjarに対応しているので、object要素を使う場合もclassファイルは不要です。

    アプレットのclassファイルやjarファイルがデータファイルとごちゃまぜになるのがいやなら、codebaseを指定すればアプレットを別のフォルダに置くこともできます。

  4. アプレットを読み込むためのHTMLを書きます。

    記述例をいくつか示します。これは書庫のファイル名がkiss218.lzh、コンフィグファイル名がKISS.CNF、サイズが448*320のデータの場合の例です。width、height、lzh_nameパラメータ(とデータファイルへのリンク)、cnf_nameパラメータは実際のデータに合わせて書き替えてください。

    object要素を使った例(fkissあり)

    <object type="application/x-java-applet" width=448 height=320>
    <param name="code" value="Fkiss">
    <param name="archive" value="fkiss.jar">
    <param name="lzh_name" value="kiss218.lzh">
    <param name="cnf_name" value="KISS.CNF">
    </object> <p>着せ替えです。<a href="kiss218.lzh">ダウンロード</a>して、機種/OS別のKISSローダでご覧になれます。</p>
    <p>この場でご覧になりたい場合は、</p>
    <ul>
    <li>ブラウザの設定でJavaを有効にしてください。WindowsのInternet Explorerでは「ActiveX コントロールとプラグインの実行」を有効にした上で、Java VMのインストールが必要です。</li>
    </ul>

    HTML 5の、2009年4月23日版の草案で示されている記述例に従ってマークアップした設置例です。HTML 5ではapplet要素は廃止される予定です。

    HTML 5では属性としてのarchiveが廃止されたため、param要素でarchiveを指定しています。

    64-bit版WindowsのInternet Explorerで動かすには、32-bit版と64-bit版で正確に(パッチバージョンまで)同一バージョンのJREをインストールする必要があります。さもないと、32-bit版と64-bit版のどちらかのInternet Explorerではアプレットの起動に失敗します。これはレジストリの「HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/x-java-applet」キーの値として設定されるCLSIDがバージョン依存で、しかも64-bit用と32-bit用が互いに連動してしまう(一方の値が変わると自動的にもう片方にも反映されてしまう)にもかかわらず、「HKEY_CLASSES_ROOT\CLSID\<classid>\InProcServer32」キーは64-bit用と32-bit用が独立しているためです。applet要素を使った場合にはバージョン非依存のCLSID(8AD9C840-044E-11D1-B3E9-00805F499D93)が内部的に使われるため、この問題は発生しません。

    上記の問題を除けば、後述のHTML 4記法に比べて互換性ははるかに良好です。少なくともInternet Explorer 8 (Win64/WOW64)、Mozilla Firefox 3.0.11 (Win)、Opera 9.64 (Win)、Safari 4.0 (530.17) (Win)、Google Chrome 2.0.172.31の各ブラウザとJRE 6 Update 14の組み合わせで、問題なくアプレットが読み込まれることを確認しています。またこの記法は、HTML 4として見ても妥当です。

    object要素を使った例2(fkissあり)

    <object codetype="application/java" codebase="./" classid="java:Fkiss" archive="fkiss.jar" width=448 height=320>
    <param name="archive" value="fkiss.jar">
    <param name="lzh_name" value="kiss218.lzh">
    <param name="cnf_name" value="KISS.CNF">
    </object> <p>着せ替えです。<a href="kiss218.lzh">ダウンロード</a>して、機種/OS別のKISSローダでご覧になれます。</p>
    <p>この場でご覧になりたい場合は、</p>
    <ul>
    <li>ブラウザの設定でJavaを有効にしてください。WindowsのInternet Explorerでは「ActiveX コントロールとプラグインの実行」も有効にしてください。</li>
    <li>Windows XPを標準状態でお使いの場合、およびWindowsでInternet Explorer 5以降を標準インストールしてお使いの場合は、Java VMのインストールが必要です。</li>
    <li>MacintoshでInternet Explorer 5.0以前のバージョンをお使いの場合は、バージョンアップしてください。またMac OS 8.5以前ではMRJのインストールも必要です。</li>
    </ul>

    HTML 4.01で示されている記述例に従ってマークアップした設置例です。W3Cは将来的にapplet要素を廃止して、object要素に統一する方針です。HTML 4.01ではapplet要素は非推奨となっています。

    XHTML 1.12000年1月のWorking Draftでは、非推奨のはずのappletは残っているのにobjectが廃止されるという訳の分からない状態になっていましたが、2001-04-06のProposed Recommendationでappletが廃止されてobjectのみとなり、ようやくW3Cの方向性が誰の目にも明確に分かるようになりました。

    (2009-06-15追記)WindowsのInternet Explorerではこの記法を使うとMicrosoft VMを読み込もうとします。Microsoft VMがインストールされていなければ、この記法ではアプレットが表示されません。(2005-11-09追記)また、MS05-038によってカスタムモニカが無効にされたため、この方法は使えなくなりました。

    Internet Explorer 4.0以降(Win)で表示領域を可変にするにはobjectを使う必要があります。

    param要素でもarchiveを指定しているのはInternet Explorer (Win)対策です。Internet Explorer (Win)はobject要素のarchive属性を無視してしまいます。

    HotJavaでは、codebaseを("./"でもかまわないので)指定しないと例外が発生します。(2000/11/14)IEでVMをBuild 3319以降に更新した場合、codebaseを指定するとアプレットが起動しなくなるようです。いったいどうしろと…。(2000/11/15)IE 5.5 SP1が原因で、VMもcodebaseも関係なくとにかくアプレットが起動しないようです。最悪。(2001/04/14)IE 6.0βで修正されました。

    長文が要素内にあるとアプレットが表示されないという腐った現象がNetscapeで発生したので、注意書きを要素外に追い出しました。

    applet要素を使った例(fkissあり)

    <applet code="Fkiss" archive="fkiss.jar" width=448 height=320>
    <param name="lzh_name" value="kiss218.lzh">
    <param name="cnf_name" value="KISS.CNF">
    </applet>
    <p>着せ替えです。<a href="kiss218.lzh">ダウンロード</a>して、機種/OS別のKISSローダでご覧になれます。</p>
    <p>この場でご覧になりたい場合は、</p>
    <ul>
    <li>ブラウザの設定でJavaを有効にしてください。</li>
    <li>WindowsでIE 5以降を標準インストールして使っている場合は、Java VMのインストールが必要です。</li>
    <li>MacintoshでIE 4.5以降を使っている場合は、MRJのインストールが必要です。</li>
    </ul>

    applet要素は将来的に廃止予定ですが、HTML 4記法には

    1. (2005-11-09追記)WindowsのInternet Explorer 6ではMS05-038によってカスタムモニカが無効にされたため、object要素でJavaアプレットをロードすることができなくなった。(2008-12-18追記)Internet Explorer 7以降もMS05-038より後にリリースされたため、同様にカスタムモニカが使えない。
    2. HTML4勧告前の非常に古いブラウザ(たとえばNetscape Navigator 3.x)は、たとえJavaアプレット対応でもobject要素をサポートしていない。(2008-12-17更新)またサポートしていても、ブラウザによっては(たとえばMacintoshのInternet Explorer 4.01/4.5/5.0やSafariGoogle Chromeは)HTML 4記法を認識しない。(2002/05/02追記)Internet Explorer 5.1.4(Mac)は認識するようです。正確にどのバージョンから認識するようになったかは未調査です。
    3. WindowsのIE 5はobjectを認識するが、ステータスバーに何も表示できない、本来object要素の属性として指定するものをparamで与えなくてはならない、アプレットの作者が注意しないとSecurityExceptionで起動しなかったり初期化中ブラウザ全体が固まったりと問題だらけ。
    4. WindowsのIE 5.5 beta3はobjectで読み込むとアプレットがマウスやキーの入力を一切認識してくれない。正式版までに直っていることを祈る。(2000/07/15)正式版で修正されました。やれやれ。
    5. object要素をこの方法で使うとIE 5.5 SP1で一切認識されない。IE 6.0βでは修正済み。
    6. 最新のJREには、Internet Explorer上でapplet要素によりJava Plug-inを呼び出す機能があるが、object要素をこの方法で使った場合Java Plug-inではなくMicrosoft VMが呼び出されてしまう。
    7. Microsoft VMがインストールされていないとWindowsのInternet Explorerではobjectを認識しない。
    8. Windowsではobject要素をこの方法で使ったときjarファイルが見つけられないと、その後ページを遷移しようとしたときにブラウザがフリーズする。また*.classを探しに行かない。
    9. Javaアプレットに対応しているがappletを認識しないブラウザは、すくなくとも今のところ存在しない。

    等々の問題があるため、appletを使った例も残しておきます。これらの問題のほとんどはHTML 5記法では発生しません。(2009-11-07更新)もっともHTML 5では、後方互換のためブラウザはapplet要素を解釈し続けなければならないと規定されているので、今applet要素で書かれていて問題なく動いているなら、あわてて書き換える必要はありません。

    (2003/07/01追記)Windowsでは、Microsoft VMもJREもインストールされていない場合、applet要素に出くわすとオンデマンドインストールが動作していましたが、2003/2/20以降、Sunとの訴訟の関係でWindows Updateのサイトに飛ばされるだけになってしまいました。しかしWindows Updateでは、すでにMicrosoft VMがインストールされていないと新規にセットアップはできません。したがって予備知識のないユーザーは立ち往生してしまう可能性があります。

    Java Plug-inを使う記述にしたほうがいいかもしれません。最近のOSやブラウザでは組み込みのVMはほとんどSunのJREになっているか、それ以外の場合でもSunのJREと互換性がある方法でロードできるようになっているので、Java Plug-inを使った記述でも十分に実用的です。とくにJava Plug-inがなければ自動的にダウンロードして組み込むように指定できるので、WindowsのInternet Explorerに関する限り予備知識のないユーザーにとってはむしろapplet要素を使うより親切かもしれません。

    codebaseでアプレットの置き場を変えた例

    <object codetype="application/java" codebase="bin/" classid="java:Fkiss" archive="fkiss.jar" width=448 height=320>
    <param name="archive" value="fkiss.jar">
    <param name="lzh_name" value="kiss218.lzh">
    <param name="cnf_name" value="KISS.CNF">
    <p>着せ替えです。<a href="kiss218.lzh">ダウンロード</a>して、機種/OS別のKISSローダでご覧になれます。</p>
    </object>

    この例ではHTMLと同じディレクトリにkiss218.lzhとbinというサブディレクトリがあり、アプレットのclassファイルやjarファイルはそのbinの中に置かれています。codebaseの指定は相対パスでなくてもいいので同じサーバ上であればアプレットはどこに置いてもかまいません。

    object要素を使った例(fkissなし)

    <object codetype="application/java" codebase="./" classid="java:Kiss" archive="kiss.jar" width=448 height=320>
    <param name="archive" value="kiss.jar">
    <param name="lzh_name" value="kiss218.lzh">
    <param name="cnf_name" value="KISS.CNF">
    <p>着せ替えです。<a href="kiss218.lzh">ダウンロード</a>して、機種/OS別のKISSローダでご覧になれます。</p>
    </object>

    fkiss対応でファイルがかなり大きくなってしまったので、fkissなしのバージョンも用意しました。データでfkissを使用していない場合はこちらで十分です。

    object要素でJava Plug-inを使う例

    前述のように、Java VMの実装によっては半透明表現が不完全な場合があります。(2002/05/02追記)v0.20で解決しました。Java Plug-inを使うようにすればVMの差異に悩まされることはなくなりますが、利用者にJava Plug-inをインストールしてもらう必要があります。また、Java対応のブラウザはあってもJava Plug-inは移植されていないプラットフォームもあります。

    SunはMac OS 9以前のバージョン用にJava Plug-inをリリースしていませんが、Netscape 4.76以降ではMRJ Plug-inが組み込まれ、Java VMをMRJとNetscape内蔵のVMから選択できます。

    HotJava 3.0では「8AD9C840-044E-11D1-B3E9-00805F499D93.class」が見つからないとかいう間抜けな例外で動作しません。ただでさえJava Plug-in対応のHTMLを書いたページはほとんど見当たらないのに、自らさらに使い勝手を悪くしてどうするんでしょうかSunは。

    ブラウザ組み込みのJava VMとJava Plug-inのどちらを使ったほうがいいのかは一概には決められないので、各自で判断してください。

    新しいJREではInternet Explorerのapplet要素でもJava Plug-inを呼び出すことができるようになったので、あえて特殊なタグを使う必要はほとんどありません。

    (2002/05/02追記)このアプレットに限っていえば、わざわざJava Plug-inをインストールしないと使えないように書く意味はもはやないと思います。

    <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width=448 height=320 codebase="http://java.sun.com/products/plugin/1.2/jinstall-12-win32.cab#Version=1,2,0,0">
    <param name="code" value="Fkiss">
    <param name="archive" value="fkiss.jar">
    <param name="type" value="application/x-java-applet;version=1.2">
    <param name="lzh_name" value="kiss218.lzh?.jar">
    <param name="cnf_name" value="KISS.CNF">
    <p>着せ替えです。<a href="kiss218.lzh">ダウンロード</a>して、機種/OS別のKISSローダでご覧になれます。</p>
    </object>

    データファイル名の末尾に「?.jar」を付けているのは、.jarか.classで終わる名前でないとキャッシュしないというJava Plug-inの仕様対策です。とくにデータが大きいときは一度訪問した後の再ロードが大幅に速くなります。Java Plug-inを標準のVMとしているブラウザや、appletでJava Plug-inが呼ばれる可能性に備えて、applet要素を使う場合でも同様の細工をしたほうがいいかもしれません。

    object要素とembed要素の両方でJava Plug-inを使う例

    上記の方法でJava Plug-inを読み込むと古いNetscapeでアプレットを表示できません。対応させようとするとNetscape独自のembed要素を使わなくてはならないので、HTML 4では文法的に妥当なHTMLにすることは不可能でした。(2009-06-15追記)HTML 5ではembed要素が復活しています。

    等価な内容をきちんと用意してあれば無理にブラウザ上で表示させる必要はないことも考慮しましょう。

    <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width=448 height=320 codebase="http://java.sun.com/products/plugin/1.2/jinstall-12-win32.cab#Version=1,2,0,0">
    <param name="code" value="Fkiss">
    <param name="archive" value="fkiss.jar">
    <param name="type" value="application/x-java-applet;version=1.2">
    <param name="lzh_name" value="kiss218.lzh">
    <param name="cnf_name" value="KISS.CNF">
    <embed type="application/x-java-applet;version=1.2" width=448 height=320 code="Kiss" archive="kiss.jar" lzh_name="kiss218.lzh" cnf_name="KISS.CNF" pluginspace="http://java.sun.com/products/plugin/1.2/plugin-install.html">
    <noembed>
    <p>着せ替えです。<a href="kiss218.lzh">ダウンロード</a>して、機種/OS別のKISSローダでご覧になれます。</p>
    </noembed>
    </embed>
    </object>

ゲスト利用

codebaseを指定することにより、自分のディレクトリにアプレットがなくても、任意のディレクトリ上のアプレットファイルを利用できます。ただしセキュリティの都合上、同じサーバ上になくてはなりません。

たとえば、私は

にアプレットを置いてあるので、@nifty(のhomepage1サーバ)にページをお持ちの方なら

<applet code="Fkiss" codebase="/emk/java/" archive="fkiss.jar" width=448 height=320>
<param name="lzh_name" value="kiss218.lzh">
<param name="cnf_name" value="KISS.CNF">
<p>着せ替えです。<a href="kiss218.lzh">ダウンロード</a>して、機種/OS別のKISSローダでご覧になれます。</p>
</applet>

のように書くことで、私のサイト上のアプレットを利用できます。

アプレットの分だけディスク容量を節約できますし、常に最新版を参照できます。ただし上記の場所に置かれているアプレットの永続性その他に関しては何も保証しません。あしからず。

パラメータ

現在公開されているパラメータは以下の通りです。appletやobjectの中で指定してください。

path - データファイルの位置

<param name="path" value="data/">

データファイル(.cnf/.cel/.kcf/.lzhなど)をクラスファイルやjarと別のディレクトリに置きたい場合、その位置を指定します。上記はdataディレクトリにデータを置いてある場合の例です。

Javaのセキュリティの都合上、HTMLファイルが置かれているディレクトリのサブディレクトリしか指定できません。またローカルファイルの場合は、クラスファイルが置かれているディレクトリのサブディレクトリにもなっていなくてはならないようです。

color - ファンクションエリアの色

<param name="color" value="#0000ff">

画面右上に表示される、ファンクションエリア(セットやパレット組切り替え用の箱)の色を指定します。省略時は白になります。上記は青を指定する場合の例です。

指定の形式はHTMLのBODYタグでの色指定と同じです。ただし16進数による指定のみで、色名による指定はできません。

等価な内容を書きましょう

Javaアプレットの特長としてはPlug-in不要なことやプラットフォームを選ばずさまざまな環境で動作できることがあげられますが、世の中にはJavaアプレットに対応していないブラウザも当然あります。

Javaアプレットが動作しないのは古いブラウザだとは限りません。たとえばWindows版のInternet Explorer 5から、標準ではJava VMがインストールされなくなりました。Windows XPでもJava VMは標準でインストールされなくなりました。またMacintosh版のInternet Explorer 4.5以降では、Internet Explorer 4.01からMicrosoft VMを引き継ぐか、MRJをインストールしない限りJavaは使えません。もちろんJava VMやMRJをインストールすれば使えますが、利用者にインストールの手間を強いるのではPlug-inとたいして変わりありません。

WebにアクセスできるのはPCばかりではありません。DreamPassportiモードなどもありえます。普及台数だけ見ればiモードは決して特殊な環境ではありません。いずれもJavaアプレットには非対応です。携帯機器の場合はリソースの制約から対応することも困難でしょう。

またブラウザがJavaに対応していても、セキュリティへの不安やNetscape 4.xでのJavaの初回起動の遅さから、あえてJavaを無効にしている利用者も存在します。

HTMLの仕様はそのような場合の対処も可能なようにちゃんと考えられています。Javaアプレットが無効な環境では、object要素(またはapplet要素)の中身が表示されます。これはJavaアプレットが有効なときには無視されるので、ここにJavaアプレットが無効なブラウザ用の記述を書いておくことができます。これを等価な内容と言います。

このアプレットが使うデータはKISSデータなので、ダウンロードすればふつうのKISSローダでそのまま読めます。したがってダウンロード用のパッケージを別途作成する手間はかかりません。データにリンクを張るだけです。等価な内容を書くことはWAIでも必須とされています。ぜひ書きましょう。上記の記述例は最低限の等価な内容も含んでいますが、説明は実際のデータに合わせてもっと詳しくしたほうがいいかもしれません。

なお、等価な内容はその名のとおり、object要素が表現するもの(この場合は着せ替え)と等価な内容を利用者が得られるようにするためのものです。間違っても「Javaアプレットが使えない人は帰ってください」みたいなことは書かないようにしましょう。

未対応の機能・既知の不具合

※この項のリンクは、メモ代わりに私がlocalhostへ張ったものなので他の人がたどってもつながらないものが含まれています。あらかじめご了承ください。

オブジェクトを画面の外に動かすことができます。画面の端で引っかかることを前提に移動制限を実現しているデータでは意図したとおりに動作しません。

FKiSS2はサポートしていません。

アーカイブ中のドキュメントを表示させることはできません。必要でしたら別途HTMLに埋め込むなりDOCだけアーカイブとは別にリンクするなりしてください。

CNF解析はかなりいい加減です。エラー処理も甘いので、データによってはあっさりNullPointerExceptionとかNumberFormatExceptionとかArrayIndexOutOfBoundsExceptionとかで初期化に失敗します。KISS/GSの仕様どおりにCNFを書いていれば問題ないはずですが…。

たとえば全角空白を区切り文字とみなしません。

LZH内のディレクトリは一切無視します。

LZH内LZHは読み込めません。理論的にはLZHInputStreamをネストさせるだけなので比較的簡単なはずですが手抜きモードです。KISS 2.50d以降のデータはほぼ間違いなくローダのLZH直視の仕様を考慮していますが、それ以前のものだと平気でLZH内LZHになっていたりします。

ckissデータは非圧縮のもののみ対応です。海外のKISSローダが圧縮セルに対応していない、国内のckissデータはほとんどがCD-ROM配布であるため圧縮の必要性が薄い、圧縮セルを作成できるのがコマンドライン用のツールしかない、などの理由から、圧縮セルが使われたckissデータはほとんどないので、実用上は問題ないと思います。

ks_rumi.lzhがNullPointerExceptionを起こします。書庫が破損しているようです。

ksmars4.lzh(追加セットのようだが)で、最初にセット9が選択されるはずですがそうなりません。

Java VMに依存する制限事項

Mac版Netscape Communicator 4.xでckissのフルカラーデータが正常に表示されない

Mac版NetscapeのJava VMが透明度をまともにサポートしていないためと思われます。Netscape 4.76以降なら、Java VMにMRJを選択することでなんとかなるかもしれません。

(2002/05/02追記)v0.20以降で対策されました。

Windows版の英語版Netscape Navigator 3.0xでNullPointerExceptionになる

Netscape 3.0xのバグです。アプレット側ではほぼ対処のしようがありません。EncodingをWestern (Latin 1)にすればいいのですが、もちろん日本語が文字化けします。また文字コードを明示しているとそれもできません。

とりあえず日本語版の3.01はこの問題に対処済みです。

英語版は最新の3.04でも対処していないようです。uni3200.dllとawt32301.dllだけを日本語版の3.01から持ってきて上書きすると解消するかもしれませんが試していません。

Mac版IEでMicrosoft VMを使っていると半透明のセルが正しく表示されない

上記のとおり、Mac版IEのMicrosoft VMは半透明をまったくサポートしていません。アプレット側での対策は簡単ではなさそうですし、MacでのMicrosoft VMの開発は打ち切られているのでとりあえず見送っています。必要ならMRJを使ってください。

(2002/05/02追記)v0.20以降で対策されたと思われます(未確認)。

JDK 1.0.2のAppletViewerがClassFormatErrorを起こす

JDK 1.0.2のAppletViewerは、WebサーバによってはClassFormatErrorを起こして、いかなるアプレットも一切開けません。これはJDK 1.0.2のバグです。WebサーバがHTTP/1.1を返すと不正な応答とみなすようですが、RFC 2145を読めばそういうことをしてはいけないのは明らかです。

JDK 1.0.2はかなり古いですしAppletViewerをローカルでのテスト以外で使うこともまずないでしょうから実質的に気にする必要はないと思います。

サーバ管理者であれば、JDK 1.0.2のアクセスに対して強制的にHTTP/1.0の応答を返すよう設定することで回避できます。たとえばApacheならhttpd.confに

BrowserMatch "JDK/1\.0" force-response-1.0

のように書きます。最近のApacheでは標準でこの設定がされているようです。

リンク


mailto: VYV03354@nifty.ne.jp