Java 1.6 update 24 と 26 での ImageIcon の違い
Mac OS X で java 1.6 の update 26 を適用後,古いカルテのシェーマ画像を削除しようとしたところ,以下のような例外が出て,できなくなってしまった。
サーバは Ubuntu 8.04LTS であるが,aptitude でインストールした java は update 24 のままであった。update 26 はまだ aptitude ではインストールできないようなので,自力で update 26 をインストールした。
Caused by: java.io.InvalidClassException: javax.swing.ImageIcon; local class incompatible: stream classdesc serialVersionUID = -962022720109015502, local class serialVersionUID = 532615968316031794 at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1582) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495) ・・・update 24→26で,ImageIcon.java の SerialVersionUID が変わってしまったようだ。
サーバは Ubuntu 8.04LTS であるが,aptitude でインストールした java は update 24 のままであった。update 26 はまだ aptitude ではインストールできないようなので,自力で update 26 をインストールした。
- Oracle のホームページから,jdk-6u26-linux-i586.bin をダウンロードして展開
$ ./jdk-6u26-linux-i586.bin $ ls -la drwxr-xr-x 2 dolphin dolphin 4096 2011-07-05 07:55 ./ drwxr-xr-x 15 dolphin dolphin 4096 2011-07-05 07:57 ../ -rwxr-xr-x 1 dolphin dolphin 85141056 2011-07-05 07:53 jdk-6u26-linux-i586.bin drwxr-xr-x 10 dolphin dolphin 4096 2011-07-05 07:55 jdk1.6.0_26/
- できた jdk1.6.0_26 を /usr/lib/jvm/ に移動
- リンクの付け替え
$ sudo mv java-6-sun java-6-sun.bak $ sudo ln -s jdk1.6.0_26 java-6-sun $ ls -la drwxr-xr-x 5 root root 4096 2011-07-05 07:55 ./ drwxr-xr-x 44 root root 12288 2011-06-22 08:45 ../ -rw-r--r-- 1 root root 2448 2011-02-24 03:25 .java-6-sun.jinfo lrwxrwxrwx 1 root root 11 2011-07-05 07:55 java-6-sun -> jdk1.6.0_26/ drwxr-xr-x 8 root root 4096 2010-02-14 20:16 java-6-sun-1.6.0.17/ drwxr-xr-x 8 root root 4096 2011-03-23 10:18 java-6-sun-1.6.0.24/ lrwxrwxrwx 1 root root 19 2011-03-23 10:18 java-6-sun.bak -> java-6-sun-1.6.0.24/ drwxr-xr-x 10 dolphin dolphin 4096 2011-07-05 07:55 jdk1.6.0_26/
- 確認
$ java -version java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
- DISPLAY 環境変数が設定されていると XToolkit 関連の例外が発生するので,.bashrc で設定している場合はコメントアウトしてから再起動