FreeBSDのJava環境はJDK1.1.8(正式版)とJDK1.2.2(ベータ版)がありますが、世の中はすでにJ2SEとか言っている上に、すでにSunからJDK1.3.1がリリースされていたりします。ラッキーなことに?Linux版もリリースされているので、この際、Linux版のJDK1.3.1をFreeBSDで使えるようにしてしまうことにします。
# cd /usr/ports/emulators/linux_base # make install clean準備はこれでOK!
# cd /path/to/install/directory (インストールしたいディレクトリの親ディレクトリに移動します。) # sh /somewhere/j2sdk-1_3_1-linux-i386.binこれでJDK1.3.1がインストールされます。とりあえず実行してみると
% $JAVA_HOME/bin/java -version expr: syntax error java version "1.3.1" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24) Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode) Java HotSpot(TM) Client VM warning: cannot uninstall alt signal stack Java HotSpot(TM) Client VM warning: cannot uninstall alt signal stackと言われてムカつくのでいろいろ調べてみると、上で実行した
javaの実体は.javawrapperであることが分かります。もう少し調べてみると、このファイルはシェルスクリプトらしいということが分かるので、以下のようにコマンドを実行してみます。
% sh -x $JAVA_HOME/bin/java -versionメッセージがたくさんコンソールにでてきますが、これを追っていくとここで
exprを実行しているというのが分かります。そこで、次はexprがどこにあるのかを調べます。モノはLinuxのなので、当然、/usr/compat/linux以下を探すと/usr/compat/linux/usr/bin/exprが見つかりました。そこで、.javawrapperを次のように書き換えてしまうことにします。
% cd $JAVA_HOME/bin
% diff -c .java_wrapper.org .java_wrapper
*** .java_wrapper.org Sun Jun 10 02:36:57 2001
--- .java_wrapper Sun Jun 10 02:25:18 2001
***************
*** 34,41 ****
# Resolve symlinks. See 4152645.
while [ -L "$PRG" ]; do
ls=`ls -ld "$PRG"`
! link=`expr "$ls" : '.*-> \(.*\)$'`
! if expr "$link" : '/' > /dev/null; then
PRG="$link"
else
PRG="`dirname $PRG`/$link"
--- 34,41 ----
# Resolve symlinks. See 4152645.
while [ -L "$PRG" ]; do
ls=`ls -ld "$PRG"`
! link=`/usr/compat/linux/usr/bin/expr "$ls" : '.*-> \(.*\)$'`
! if /usr/compat/linux/usr/bin/expr "$link" : '/' > /dev/null; then
PRG="$link"
else
PRG="`dirname $PRG`/$link"
%
ここでもう一度実行してみると、
% $JAVA_HOME/bin/java -version java version "1.3.1" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24) Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode) Java HotSpot(TM) Client VM warning: cannot uninstall alt signal stack Java HotSpot(TM) Client VM warning: cannot uninstall alt signal stackかなりよくなりました。でも、まだHotSpot関連のメッセージが出ています。FreeBSDではJDK1.3.1 for LinuxのHotSpotはうまく動かないそうです。なので、HotSpotなしで実行してみます。
% $JAVA_HOME/bin/java -classic -version java version "1.3.1" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24) Classic VM (build 1.3.1-b24, green threads, nojit)とりあえずはよさそうです。ただ、JIT(Just In Time)コンパイラなしは悲しいですね。blackdownの最新のJDKは1.3.0なので、1.3.1が出たらこちらに乗り換えてshuJITを入れて使ってみることにします。
JAVA_HOME、pathを設定して実際にデモを動かしてみましょう。
% setenv JAVA_HOME /path/to/installed/directory % set path=($path $JAVA_HOME/bin)これで設定はOKです。次にデモを動かしてみます。
% cd $JAVA_HOME/demo/jfc/Java2D
% java -classic -jar Java2Demo.jar
Font specified in font.properties not found [--symbol-medium-r-normal--*-%d-*-*-p-*-adobe-fontspecific]
Font specified in font.properties not found [--symbol-medium-r-normal--*-%d-*-*-p-*-adobe-fontspecific]
:
java.awt.AWTException: cannot open XIM
at sun.awt.motif.X11InputMethod.(X11InputMethod.java:148)
at sun.awt.motif.X11InputMethodDescriptor.createInputMethod(X11InputMethodDescriptor.java:78)
at sun.awt.im.InputContext.getInputMethodInstance(InputContext.java:691)
at sun.awt.im.InputContext.getInputMethod(InputContext.java:641)
at sun.awt.im.InputContext.dispatchEvent(InputContext.java:193)
at sun.awt.im.InputMethodContext.dispatchEvent(InputMethodContext.java:177)
:
フォント関連のエラーがたくさん出ています。それからXIMがオープンできないというExceptionが飛んでいます。(^^;)これはどうすればよいのでしょう?が、一応ちゃんと表示されています。かなり見ごたえありますね。しかし、CPUぶんぶん回っているし、メモリ100Mくらいがjavaに使われています。これは厳しいですね。
ところで、XIMがオープンできないというExceptionが飛んでいる問題ですが、以下のようにしても相変わらずメッセージが出ます。この問題への対処方法をご存知の方、どうかご教授下さい。よろしくお願い致します。
(1) % env LANG=C LC_ALL=C LC_MESSAGES=C XMODIFIERS=@im=none /usr/local/java/jdk1.3.1/bin/java -classic -jar Java2Demo.jar (2) % unsetenv LANG LC_ALL LC_MESSAGES XMODIFIERS % java -classic -jar Java2Demo.jar