<< 2007/08/31 | Home | 2007/09/02 >>
PR: 転職    転職    合宿免許    漫画    シルバー    ブライダルエステ    墓地・霊園    葬式   

Ubuntu上のJavaでキー入力ができなくなる件。

Open JDKのソースをもとに、ちょっと追っかけてみた。

sun.awt.X11.XToolkit.java (line:576)

        if (XlibWrapper.XFilterEvent(ev.getPData(), w)) {
            continue;
        }

キーが効かなくなっている時は、XFilterEvent()がtrueを返し続けている模様。これってXIMがイベントを処理中の時にtrueを返すんだよね(XlibWrapper.XFilterEvent()はnativeメソッドで、XのXFilterEvent()を呼び出しているだけ)。どうも問題はJavaの外側にある感じがする。

OpenJDK

話のタネにビルドしてみた。(Ubuntu 6.10と7.04で確認)

openjdkのサイトに行って、openjdk-7-ea-src-b19-30_aug_2007.zipを取ってくる。展開するとopenjdkディレクトリができる。

JDKをビルドするには、JDKが必要になるんで、バイナリも必要になる。JDK7のサイトに行って、Latest JDK 7 binary snapshotsを取ってくる。Linux用のjdk-7-ea-bin-b19-linux-i586-30_aug_2007.binを取得。以下で普通にインストール。

chmod +x jdk-7-ea-bin-b19-linux-i586-30_aug_2007.bin
./jdk-7-ea-bin-b19-linux-i586-30_aug_2007.bin

openjdkは、一部、まだソースが公開されていないのがあって、それはbinary plugsという名前でビルド用に限ってということで、提供されている。これはJDK 7のサイトにあるので、取ってくる。jdk-7-ea-plug-b19-linux-i586-30_aug_2007.jar。以下で任意の場所にインストール。

java -jar jdk-7-ea-plug-b19-linux-i586-30_aug_2007.jar

環境変数を設定。

export LANG=C
export ALT_BOOTDIR=[[JDK 1.7.0のディレクトリ]]
export ALT_JDK_IMPORT_PATH=[[JDK 1.7.0のディレクトリ]]
export ALT_BINARY_PLUGS_PATH=[[Binary Plugのインストール場所]]
export JAVA_HOME=

Synapticパッケージマネージャで以下をインストール。依存するパッケージを導入するか聞かれたら、それもインストール。あ、デフォルトだとgccとかmakeとかも入ってないかもしれないんで、gcc回りも入れる必要があるかも。

m4
gawk
lesstif2-dev
libasound2-dev
libcupsys2-dev
libxtst-dev
libxi-dev
libstdc++6-4.1-dev

あとはopenjdk/j2se/makeの下に行って、make。うちのマシンだと5分ほどで、j2se/build/linux-i586の下にできあがり。

なんかgccの動作中って、デュアルコアCPU使い切るね。マルチスレッド対応してるのかな。javacもマルチコア対応してくれたら、クアッドコア買うんだけど。

このサイトの掲載内容は私自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。
日本アイ・ビー・エム 花井 志生 Since 1997.6.8