JRE Xで設計およびコンパイルされたプログラムは、JRE Y、Yで実行されているときにどのように動作しますか
まったく実行されませんか、開始するとすぐに終了しますか、それとも JRE Y に存在しないメソッドまたはクラスに遭遇してクラッシュするまで実行されますか?
後者の場合は、起動時にバージョン チェックを行い、プログラムを実行するには Java を更新する必要があることをユーザーに通知できます (JRE Y がある場合)。
それがうまくいかない場合、それを行う別の方法はありますか?
プログラムが Java X でビルドされ、Java > X で実行される場合、問題なく機能します。
プログラムが Java X でビルドされ、Java < X で実行される場合、互換性のないプログラム クラスがロードされると、実行中の任意の時点でプログラムが正しく機能するか、予期せず終了する可能性があります。
プログラム クラスは、次の 2 つの理由で互換性がない場合があります。
以前のバージョンの Java では使用できないシステム クラスを参照します。その場合、NoClassDefError が表示されます。
以前のバージョンの Java では利用できなかった言語機能を使用します。その場合、ClassFormatError が表示されます。
System.getProperty( "java.version" )によって返されるデータを参照することで、Java バージョン チェッカーを実装できます。チェッカー自体の実行に失敗しないようにするには、予想される最も低いバージョンの Java でチェッカーをコンパイルする必要があります。さらに、アプリケーションの残りの部分へのコード参照を作成する前に、できるだけ早くチェックが行われるようにする必要があります。これは、チェックが成功したときに、チェッカーでJava リフレクションを使用してメイン プログラム クラスを呼び出すことを意味する可能性があります。