9 votes

Java JDK 11 brise les anciens Jars/Programmes

D'après ce que j'ai compris, les JRE de Java sont rétrocompatibles. Si vous écrivez un programme en Java (JDK) 7, il fonctionnera avec Java (JRE) 8.

J'ai quelques programmes que j'ai développés en Java 8, et j'ai des fichiers .jar et EXE que j'ai construits lorsque je les ai terminés, et ils ont toujours fonctionné correctement. Cependant, après avoir installé Java JDK 11 (11.0.2), ces anciens fichiers .jar se cassent...

  • Quelques-uns d'entre eux fonctionnent toujours, mais leur interface graphique s'est agrandie, avec des boutons et des images plus grands qu'avant, et parfois flous.
  • Un programme ne s'exécute pas du tout, essayer de l'exécuter dans une console donne une exception : " Exception dans le thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError : javax/activation/ActivationDataFlavor "

J'ai cru comprendre que cette classe et d'autres classes javax ont été supprimées du JDK 11, de sorte que du point de vue du développement, vous ne pourriez plus les utiliser sans un outil tel que Maven. Mais je ne comprends pas pourquoi l'installation du JDK 11 a un quelconque effet sur mes anciens pots, puisque je n'ai pas installé de nouveau JRE, et même s'il y en avait un, il devrait être rétrocompatible ?

Pour ajouter à cela, j'utilise Apache NetBeans 10, il fonctionnait bien avec Java 8, mais après avoir installé JDK 11, NetBeans 10 fonctionnait toujours mais sa fenêtre de chargement était grande et floue, et les images de l'IDE sont floues, et tout le texte est plus grand.

Alors pourquoi l'installation du JDK 11 a ces effets négatifs sur les anciens programmes ?

Note - J'ai essayé d'associer les jars/EXEs avec javaw.exe de JRE version 8 (201), cependant, ils ont toujours les mêmes problèmes.

6voto

Karol Dowbecki Points 27852

Java s'efforce d'être rétrocompatible, mais des changements radicaux sont parfois nécessaires pour faire évoluer l'écosystème. Jusqu'à présent, les changements de rupture étaient livrés avec les versions majeures, par exemple Java 9, 10, 11. Dans votre cas, vous êtes très probablement affecté par les changements de Java 11. JEP 320 : Suppression des modules Java EE et CORBA .

Rappelez-vous que Java 8 est sorti en 2014 . Pendant 5 ans, Oracle et la communauté Java ont fourni des patchs et des correctifs de sécurité pour Java 8, mais il est impossible de le faire éternellement.

3voto

Christian Fries Points 3010

Le problème que vous rencontrez n'est probablement pas une incompatibilité avec le bytecode. Il s'agit simplement d'une classe manquante.

Java 11 a abandonné la prise en charge de certaines anciennes technologies, par exemple les applets Java. Si vous exécutez une applet Java 8 dans un JDK / JRE Java 11, vous obtiendrez une exception ClassNotFound, simplement parce que Java 11 ne fournit pas la classe / jar.

De même pour JavaFX, qui existe toujours, mais ne fait plus partie de la distribution Java. Vous devez l'ajouter en tant que Jar séparé.

Je pense qu'il serait possible d'ajouter ces classes à un projet. Personnellement, j'aimerais voir un portage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X