Bonjour à tous !
Avant d'exposer mon problème, je vous fais une rapide présentation du contexte.
J'ai repris un projet Java qui a été développé en 2003 et 4 développeurs ont chacun à leur tour travailler dessus. Le projet est assez conséquent, il faut compter une centaine de classes.
J'ai gardé la dernière version du projet en copie, et j'ai déjà commencé à y apporter des modifications selon les besoins du client.
L'application permet de créer des schémas à base de JButton, JPanel... et on peut sauvegarder le schéma par la sérialisation dans un fichier au format .alp (ce sont les précédents développeurs qui ont choisi le format).
Au fur et à mesure que je codais, j'ai remarqué qu'en lançant l'application (celle où j'apportais mes modifications), je n'arrivais pas à ouvrir les anciens schémas créés avant mon arrivé. Je ne pouvait ouvrir que celle que j'ai créé avec cette dernière version de l'application. J'ai alors une exception qui est levée :
java.lang.ClassCastException: cannot assign instance of javax.swing.ActionMap to field javax.swing.JComponent.ancestorInputMap of type javax.swing.InputMap in instance of javax.swing.JButton
En effectuant des recherches, j'ai supposé que le problème venait de la sérialisation et que le fait d'avoir apporté des modifications ait rendu l'application incompatible avec les anciens schéma .alp. Cependant j'ai effectué des tests et je ne pense pas que le problème vienne de l'incompatibilité du code mais de la version de Java... Je m'explique : j'ai fait des tests sur plusieurs machines de la boîte, certaines ont Java 6 d'installé et les autres ont Java 8. Lorsque je lance l'application (que ça soit celle de base ou celle que je modifie, j'ai essayé d'alterner les deux sans problème) depuis une machine sous Java 6, je peux ouvrir les anciens fichiers (qui ont été créé par une machine sous Java 6) mais pas les nouveaux (qui ont été créé par une machine sous Java 8). Inversement, lorsque je lance l'application depuis une machine sous Java 8, je ne peux ouvrir que les nouveaux et pas les anciens.
Ma question est donc : est-ce que la sérialisation est liée à la version de Java ? C'est-à-dire que l'on ne pourrait désérialiser que les fichiers qui ont été sérialisé avec une même version de Java ? Si oui, y-a-t-il une solution pour résoudre ce problème ?
Excusez-moi pour le pavé, je voulais m'assurer d'être clair (même si je ne sais pas si je l'ai vraiment été ^^").
Le code étant assez conséquent, j'ai décidé de ne pas tout de suite en montrer et voir si l'on peut répondre à la question sans. Sinon, j'essayerais de mettre les parties de code
Merci![]()
Partager