トイパロウィングス 製作状況17 MicrosoftVM対応
先日作成したJavaアプレット
がMicrosoftVM(MSJVM)で動作しなかった問題を修正しました。
動作しない原因はMicrosoftVMのjava.awt.FontMetricsクラスにgetStringBoundsメソッドが存在していないことでした。この機能は、表示する文字列のベースライン・横幅・縦幅を求めるために使用していました。
回避策として、横幅はstringWidthで取得し、それ以外は適当に算出するようにしました。私の環境ではVMがsumでもMSでも問題なく表示されましたが、MACやLinux等で微妙に文字の表示位置がズレたりしないか不安が残ります。
Windows以外のマシンにMicrosoftVMが搭載されていることはないはずですし、VMによってロジックが切り替わるようにするのがベストだとは考えたのですが、動的クラスロードのようなことをするのは難しそうですので、とりあえずは古い機能だけで対応しました。
対応VM問題はこれからもちょくちょく出てきそうで困ります。
ちなみに適当な算出とは次のようになります。
x = 0;
y = -フォントサイズ;
width = metrics.stringWidth(文字列);
height = フォントサイズ *13 /10;
動作しない原因はMicrosoftVMのjava.awt.FontMetricsクラスにgetStringBoundsメソッドが存在していないことでした。この機能は、表示する文字列のベースライン・横幅・縦幅を求めるために使用していました。
回避策として、横幅はstringWidthで取得し、それ以外は適当に算出するようにしました。私の環境ではVMがsumでもMSでも問題なく表示されましたが、MACやLinux等で微妙に文字の表示位置がズレたりしないか不安が残ります。
Windows以外のマシンにMicrosoftVMが搭載されていることはないはずですし、VMによってロジックが切り替わるようにするのがベストだとは考えたのですが、動的クラスロードのようなことをするのは難しそうですので、とりあえずは古い機能だけで対応しました。
対応VM問題はこれからもちょくちょく出てきそうで困ります。
ちなみに適当な算出とは次のようになります。
x = 0;
y = -フォントサイズ;
width = metrics.stringWidth(文字列);
height = フォントサイズ *13 /10;