web-dev-qa-db-ja.com

Java JDK 11 Breaking Old jars / programs

Java JREは下位互換性があると私は理解しています。Java(JDK)7でプログラムを作成すると、Java(JRE)で実行されます8。

Java 8で開発したプログラムがいくつかあり、それらを完成させたときにビルドした.jarファイルとEXEファイルを持っているので、常に問題なく動作しました。ただし、Java JDK 11(11.0.2)をインストールすると、これらの古い.jarファイルが壊れます...

  • それらのいくつかはまだ動作していますが、GUIは拡張されており、ボタンや画像は以前より大きく、場合によってはぼやけています
  • 1つのプログラムがまったく実行されず、コンソールで実行しようとすると、例外が発生します: "Exception in thread" AWT-EventQueue-0 "Java.lang.NoClassDefFoundError:javax/activation/ActivationDataFlavor

このクラスと他のいくつかのjavaxクラスがJDK 11から削除されたことを理解しているため、開発の観点からは、Mavenなどのツールなしではそれらを使用できませんでした。しかし、私は新しいJREをインストールしなかったので、なぜJDK 11のインストールが私の古いjarファイルに影響を与えるのか理解していません。

これに追加すると、Apache NetBeans 10を使用しますが、Java 8で正常に動作しましたが、JDK 11をインストールした後もNetBeans 10は実行されましたが、読み込みウィンドウが大きくぼやけていて、IDEのイメージがぼやけています、すべてのテキストが大きくなっています。

では、なぜJDK 11をインストールすると、古いプログラムにこれらの悪影響があるのですか?

注-私はjar/EXEをJREバージョン8(201)のjavaw.exeに関連付けようとしましたが、それらはすべて同じ問題を抱えています

4
Danjo

あなたが直面している問題はおそらく互換性の問題ではありません。バイトコード。欠けているクラスです。

Java 11では、Javaアプレットなど、いくつかの古いテクノロジーのサポートが終了しました。 Java 8アプレットをJava 11 JDK/JREで実行すると、Java 11がクラス/ jarを提供しないため、ClassNotFound例外が発生します。

同様に、まだ存在しますが、Javaディストリビューションの一部ではないJavaFXについても同様です。別のjarとして追加する必要があります。

これらのクラスをプロジェクトに追加することは可能だと思います。個人的には港を見たいです。

1
Christian Fries