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もマルチコア対応してくれたら、クアッドコア買うんだけど。





