Swing のいくつかのコンポーネントは getContentPane() というメソッドを使って ContentPane を取得し,そのContentPane に子要素を追加(add)したりレイアウト指定(setLayout)しなければならない.
で,Java 1.4 では JApplet もこの制約のかかるクラスであるため,間違って直接 add を使うコードを書くとコンパイルは通るが実行時にエラーを吐いて止まってしまう.一方,Java 5 では親切なことに add などが getContentPane().add などにリダイレクトされるようにオーバーライドされている.よって,直接 add を使うコードを Java 1.4 でコンパイルしたバイトコードも,実行環境が Java 5 であれば実行時にエラーを吐くことなく動く.
と,こんな仕様のため,今日はマシンによって動かないプログラムを見事に作ってしまったのであった.
- Newer: AWK - はじめ