Probleme de mélange java8 et java9
Résolu
benoit_28
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
-
benoit_28 Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
benoit_28 Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai été aidé hier et aujourd'hui, je croyais avoir résolu le problème mais en fait je ne l'avais qu'à moitié résolu. Maintenant je l'ai résolu, mais en bricolant.
J'avais sur mon disque des "program files " java8 et java 9. Et je compilais du java8. Aucun problème si je lançais mon programme depuis mon shell (je suis sous windows). Si je mettais les lignes suivantes, comme on me l'avait conseillé:
String javaHome = System.getProperty("java.home");
gr.setColor(Color.black);
gr.drawString(" "+javaHome,100,100);;
j'obtenais :
en lançant par le shell: "C:\mon_repertoire\jre
mais si je lançais par un double clic:: C:\Program Files\Java\jre_9.0.4
et le programme s'exécutait 4 fois plus lentement.
La solution que j'ai trouvée est de recopier le jre du Java\jdk8 ....\ dans l'élément C:\Program Files\Java\jre_9.0.4 et cela marche.
J'ai eu beau supprimer tout le Java 9 des Program Files, cela me réclamait quand même ce fameux jre_9.0.4, et redémarrer l'ordinateur, rien n'y faisait . Une alternative aurait cependant été de réinstaller complètement le java 8.
Mais quelqu'un connait-il une méthode moins "bricolée" que la mienne?
Autre question: il semble bien que ce Java9 aille 4 fois moins vite que je Java8. Peut-être que ses options par défaut soient plus sécuritaires?
J'ai été aidé hier et aujourd'hui, je croyais avoir résolu le problème mais en fait je ne l'avais qu'à moitié résolu. Maintenant je l'ai résolu, mais en bricolant.
J'avais sur mon disque des "program files " java8 et java 9. Et je compilais du java8. Aucun problème si je lançais mon programme depuis mon shell (je suis sous windows). Si je mettais les lignes suivantes, comme on me l'avait conseillé:
String javaHome = System.getProperty("java.home");
gr.setColor(Color.black);
gr.drawString(" "+javaHome,100,100);;
j'obtenais :
en lançant par le shell: "C:\mon_repertoire\jre
mais si je lançais par un double clic:: C:\Program Files\Java\jre_9.0.4
et le programme s'exécutait 4 fois plus lentement.
La solution que j'ai trouvée est de recopier le jre du Java\jdk8 ....\ dans l'élément C:\Program Files\Java\jre_9.0.4 et cela marche.
J'ai eu beau supprimer tout le Java 9 des Program Files, cela me réclamait quand même ce fameux jre_9.0.4, et redémarrer l'ordinateur, rien n'y faisait . Une alternative aurait cependant été de réinstaller complètement le java 8.
Mais quelqu'un connait-il une méthode moins "bricolée" que la mienne?
Autre question: il semble bien que ce Java9 aille 4 fois moins vite que je Java8. Peut-être que ses options par défaut soient plus sécuritaires?
A voir également:
- Probleme de mélange java8 et java9
- Mélange liquide de frein et direction assistée - Forum Réseaux sociaux
- Faceapp melange visage - Astuces et Solutions
- Mélange 2 temps tronçonneuse - Guide
- Melange rouge vert - Forum Graphisme
- Mélange de couleur - Forum Graphisme
4 réponses
Bonjour,
Le double clic lance l'application par défaut associée à l'extension par Windows, que l'on peut modifier en faisant un clic droit, ouvrir avec et toujours utiliser ce programme par défaut. Tandis que l'exécution par la ligne de commandes se fait au regard des programmes (java.exe en l'occurrence) définis par la variable d'environnement PATH.
Quant aux différences entre Java 8 et Java 9, elles sont assez nombreuses vu qu'il y a eu l'introduction de la notion de modules (projet Jigsaw), mais je ne suis pas sûr que cela suffise à expliquer la différence de temps constaté pour ton programme (dont on ne sait rien).
NB. Java 9 était une version intermédiaire, qui est devenu obsolète dès la sortie de Java 10. Pour la stabilité des programmes il faudrait plutôt considérer les versions LTS (Long-Term Support) que sont Java 7, 8, 11 et 17.
https://www.oracle.com/java/technologies/java-se-support-roadmap.html
Le double clic lance l'application par défaut associée à l'extension par Windows, que l'on peut modifier en faisant un clic droit, ouvrir avec et toujours utiliser ce programme par défaut. Tandis que l'exécution par la ligne de commandes se fait au regard des programmes (java.exe en l'occurrence) définis par la variable d'environnement PATH.
Quant aux différences entre Java 8 et Java 9, elles sont assez nombreuses vu qu'il y a eu l'introduction de la notion de modules (projet Jigsaw), mais je ne suis pas sûr que cela suffise à expliquer la différence de temps constaté pour ton programme (dont on ne sait rien).
NB. Java 9 était une version intermédiaire, qui est devenu obsolète dès la sortie de Java 10. Pour la stabilité des programmes il faudrait plutôt considérer les versions LTS (Long-Term Support) que sont Java 7, 8, 11 et 17.
https://www.oracle.com/java/technologies/java-se-support-roadmap.html
Meci KX.
J'ai fait ce que tu dis: j'ai démarré mon programme non pas par un double clic, mais par un clic droit sur le .jar et j'ai eu le choix: soit "Java(TM) Platform binary" soit "Windows PowerShell". Lequel des deux faut-il prendre? J'ai fait power shell et cela a encore été prendre le Java fichier Program Files/Java/jre-9.0.4 (que j'avais modifié; par contre, cela a remis une tasse des café sur l'icone de mon .jar. Même chose avec le choix Java(TM) Platform binary;
Merci pour ce renseignement précieux et de plus pour ces précieuses indications sur les versions de Java!
J'ai fait ce que tu dis: j'ai démarré mon programme non pas par un double clic, mais par un clic droit sur le .jar et j'ai eu le choix: soit "Java(TM) Platform binary" soit "Windows PowerShell". Lequel des deux faut-il prendre? J'ai fait power shell et cela a encore été prendre le Java fichier Program Files/Java/jre-9.0.4 (que j'avais modifié; par contre, cela a remis une tasse des café sur l'icone de mon .jar. Même chose avec le choix Java(TM) Platform binary;
Merci pour ce renseignement précieux et de plus pour ces précieuses indications sur les versions de Java!
Normalement tu dois avoir un dernier choix : "choisir le programme par défaut"
Tu peux alors parcourir tes dossiers et choisir le fichier java.exe du JDK que tu souhaites utiliser par défaut.
Remarque : cela ne réglera le problème que pour ton ordinateur, si ton programme est trop sensible à la version du JDK utilisé (ce qui est toutefois assez rare...) tu devrais considérer de packager ton programme avec une JRE (cf. javapackager, jlink, jpackage) pour éviter que les autres utilisateurs du programme n'utilisent la version par défaut de leur système, qui ne sera probablement pas la même que la tienne.
NB. Grâce à l'introduction des modules en Java 9 (projet Jigsaw), lorsque l'on package une application en Java 9 ou plus, ce n'est pas toute la JRE qui est packagé avec ton application, mais seulement les modules nécessaires au programme.
Tu peux alors parcourir tes dossiers et choisir le fichier java.exe du JDK que tu souhaites utiliser par défaut.
Remarque : cela ne réglera le problème que pour ton ordinateur, si ton programme est trop sensible à la version du JDK utilisé (ce qui est toutefois assez rare...) tu devrais considérer de packager ton programme avec une JRE (cf. javapackager, jlink, jpackage) pour éviter que les autres utilisateurs du programme n'utilisent la version par défaut de leur système, qui ne sera probablement pas la même que la tienne.
NB. Grâce à l'introduction des modules en Java 9 (projet Jigsaw), lorsque l'on package une application en Java 9 ou plus, ce n'est pas toute la JRE qui est packagé avec ton application, mais seulement les modules nécessaires au programme.
Bon, j'ai en effet trouvé "rechercher l'application sur ce PC" au bout d'une liste d'applications farfelues comme Paint par exemple. J'ai bien été ouvrir le java.exe de différents jdk, dont le
C:/Program Files/Java/jdk1.8.0_261/bin/java.exe
et aussi C:/Program Files/Java/jre1.8.0_261/bin/java.exe
Cela ouvre un .jar, je vois apparaître la tasse de café dans la barre des applications en bas je ne sais pas si c'est le java.exe ou mon programme, mais cette icône dans la barre des applications disparaît tout de suite. Quand ensuite je double clique sur mon programme, j'obtiens:
C:/Program Files/Java/jre.9.0.4 dans le "java.home" ce qui n'est pas ce que je voulais.
Il y a sans doute quelque-chose que je fais à l'envers, ou que je n'ai pas compris, mais quoi?
C:/Program Files/Java/jdk1.8.0_261/bin/java.exe
et aussi C:/Program Files/Java/jre1.8.0_261/bin/java.exe
Cela ouvre un .jar, je vois apparaître la tasse de café dans la barre des applications en bas je ne sais pas si c'est le java.exe ou mon programme, mais cette icône dans la barre des applications disparaît tout de suite. Quand ensuite je double clique sur mon programme, j'obtiens:
C:/Program Files/Java/jre.9.0.4 dans le "java.home" ce qui n'est pas ce que je voulais.
Il y a sans doute quelque-chose que je fais à l'envers, ou que je n'ai pas compris, mais quoi?
On va faire ça proprement : on va désinstaller tout ce qui concerne Java (JDK et JRE, pour toutes les versions)
Tu peux utiliser la commande
https://www.java.com/fr/download/help/uninstall_java.html
Éventuellement tu peux utiliser un outil comme CCleaner pour nettoyer le registre des installations précédentes.
Ensuite je t'invite à installer d'abord la dernière version (Java 17) pour l'exécution de tes programmes Java, puis récupérer autant de JDK que nécessaire (Java 8, etc.) de préférence en version zip, sans installation.
https://www.oracle.com/java/technologies/downloads/
Ne pas oublier de mettre à jour tes variables d'environnement PATH et JAVA_HOME
Mais pour la suite, j'insiste sur le fait de ne pas changer ton installation de Java pour chaque programme que tu développes, mais passer plutôt par le packaging de ton application. C'est d'ailleurs pour cela que les JRE n'existent plus dans les dernières versions, elles sont fournies avec les JDK pour les développeurs mais doivent être fournis via le packaging pour les utilisateurs finaux.
Tu peux utiliser la commande
where javapour identifier tout ce qui est référencé par le PATH, ainsi que ce lien :
https://www.java.com/fr/download/help/uninstall_java.html
Éventuellement tu peux utiliser un outil comme CCleaner pour nettoyer le registre des installations précédentes.
Ensuite je t'invite à installer d'abord la dernière version (Java 17) pour l'exécution de tes programmes Java, puis récupérer autant de JDK que nécessaire (Java 8, etc.) de préférence en version zip, sans installation.
https://www.oracle.com/java/technologies/downloads/
Ne pas oublier de mettre à jour tes variables d'environnement PATH et JAVA_HOME
Mais pour la suite, j'insiste sur le fait de ne pas changer ton installation de Java pour chaque programme que tu développes, mais passer plutôt par le packaging de ton application. C'est d'ailleurs pour cela que les JRE n'existent plus dans les dernières versions, elles sont fournies avec les JDK pour les développeurs mais doivent être fournis via le packaging pour les utilisateurs finaux.
Bonjour,
J'ai fait ce que vous m'aviez dit!: désinstaller java8, java9 et java17. Puis réinstaller Java17 en premier, puis Java 8.
Pour ce qui est du programme lancé pas le Windows shell, le javaHome trouvé est bien le C:/Program Files/Java/jre17..., mais les dimensions de mes fenêtres se sont agrandies, et de plus les images jpg qui me servent comme commentaires ne sont pas affichées. Par contre,, la durée de l'éxécution est correcte.
J'ai donc désinstallé Java17 et donc je me retrouve uniquement avec le Java8.
Pour ce qui est du lancement par le windows shell, tout est correct: le javaHome est bien C:/Program Files/Java/jre8..., les images .jpg sont bien affichées, la durée d'exécution est la bonne.
Pour ce qui est du lancement par double clic, une fenêtre s'ouvre toute en noir ses dimensions ne correspondent à aucune de mes fenêtres, et cette fenêtre disparaît tout de suite. J'ai donc suiii votre conseil, cliqué droit, puis pris le premier chois "Java(TM) SE binary" et le programme s'est en effet ouvert(pourtant il me semble que si je double clique sur le .jar, c'est bien cs "Java(TM) SE binary" qui démarre !!??). La javaHome est bien le même que par le lancement par le shell. La durée de l'exécution est la bonne. Mais mes images .jpg ne sont pas affichées! Si maintenant je vais chercher l'application C:/Program Files/Java/jre8../bin/java.exe, quelquechose s'ouvre puis disparaît tout de suite (c'est sans doute le java.exe).
Donc, j' ai toujours 2 problèmes pour la commande directe (je n' ai aucun problème en lançant du shell:
-- le progamme ne démarre pas avec un double clic. A la limite, je pourrais recommander à mes lecteurs d'' "ouvrir avec" et de prendre le premier choix "Java TM...", mais je n'aime pas trop l'idée.
__ mes images .jpg ne sont pas lues et affichées (par la commande drawImage.)
Par contre je n'ai plus de problème de temps d'exécution avec le démarrage direct, ni de dimensions trop grandes de mes fenêtres..
Une remarque finale, qui est peut-être liée à mes problèmes: toutes les classes de mon .jar sont affichées dans le répertoire avec une icône Java "tasse de café" alors que précédemment, les icônes étaient vides.
et grand merci pour vos conseils
J'ai fait ce que vous m'aviez dit!: désinstaller java8, java9 et java17. Puis réinstaller Java17 en premier, puis Java 8.
Pour ce qui est du programme lancé pas le Windows shell, le javaHome trouvé est bien le C:/Program Files/Java/jre17..., mais les dimensions de mes fenêtres se sont agrandies, et de plus les images jpg qui me servent comme commentaires ne sont pas affichées. Par contre,, la durée de l'éxécution est correcte.
J'ai donc désinstallé Java17 et donc je me retrouve uniquement avec le Java8.
Pour ce qui est du lancement par le windows shell, tout est correct: le javaHome est bien C:/Program Files/Java/jre8..., les images .jpg sont bien affichées, la durée d'exécution est la bonne.
Pour ce qui est du lancement par double clic, une fenêtre s'ouvre toute en noir ses dimensions ne correspondent à aucune de mes fenêtres, et cette fenêtre disparaît tout de suite. J'ai donc suiii votre conseil, cliqué droit, puis pris le premier chois "Java(TM) SE binary" et le programme s'est en effet ouvert(pourtant il me semble que si je double clique sur le .jar, c'est bien cs "Java(TM) SE binary" qui démarre !!??). La javaHome est bien le même que par le lancement par le shell. La durée de l'exécution est la bonne. Mais mes images .jpg ne sont pas affichées! Si maintenant je vais chercher l'application C:/Program Files/Java/jre8../bin/java.exe, quelquechose s'ouvre puis disparaît tout de suite (c'est sans doute le java.exe).
Donc, j' ai toujours 2 problèmes pour la commande directe (je n' ai aucun problème en lançant du shell:
-- le progamme ne démarre pas avec un double clic. A la limite, je pourrais recommander à mes lecteurs d'' "ouvrir avec" et de prendre le premier choix "Java TM...", mais je n'aime pas trop l'idée.
__ mes images .jpg ne sont pas lues et affichées (par la commande drawImage.)
Par contre je n'ai plus de problème de temps d'exécution avec le démarrage direct, ni de dimensions trop grandes de mes fenêtres..
Une remarque finale, qui est peut-être liée à mes problèmes: toutes les classes de mon .jar sont affichées dans le répertoire avec une icône Java "tasse de café" alors que précédemment, les icônes étaient vides.
et grand merci pour vos conseils
Je crois que mes problèmes se résument en un seul: je n'arrive pas à démarrer mon programme avec un double clic sur l'icône mon_programme.jar, et cela quel que soit la version de Java (j'ai essayé 8,9,17 et 7)
J'arrive bien à le démarrer en cliquant à droite sur l'icone du .jar, puis en choisissant "ouvrir avec ", et en acceptant le premier choix d'application -Java(TM) Platform SE binary , mais alors le répertoire où chercher mes images .jpg n'est pas le bon (le System.getProperty("user.dir") indique: C:\Windows\System32 qui ne m'appartient pas!).
Et en allant chercher d'autres application pour ouvrir, cela ne marche pas non plus, et je n'arrive pas à trouver une application qui fonctionne.
Enfin, pourquoi toutes les icônes de mes classes ont l'écusson de java (la tasse de café) alors que précédemment cela était réservé au .jar?
J'arrive bien à le démarrer en cliquant à droite sur l'icone du .jar, puis en choisissant "ouvrir avec ", et en acceptant le premier choix d'application -Java(TM) Platform SE binary , mais alors le répertoire où chercher mes images .jpg n'est pas le bon (le System.getProperty("user.dir") indique: C:\Windows\System32 qui ne m'appartient pas!).
Et en allant chercher d'autres application pour ouvrir, cela ne marche pas non plus, et je n'arrive pas à trouver une application qui fonctionne.
Enfin, pourquoi toutes les icônes de mes classes ont l'écusson de java (la tasse de café) alors que précédemment cela était réservé au .jar?
"Je crois que mes problèmes se résument en un seul: je n'arrive pas à démarrer mon programme avec un double clic sur l'icône mon_programme.jar"
Non, le problème c'est que tu ne tiens pas compte de mes réponses.
Au cours de nos deux discussions j'ai mentionné à trois reprises (ici, ici et là) qu'il fallait packager ton application. C'est à dire que tu ne devrais pas te retrouver à cliquer sur un .jar mais sur un .exe
Aucun utilisateur, même développeur, ne devrait avoir à réinstaller un JDK à chaque fois qu'il essaye d'exécuter une application Java. Que tu ais plusieurs JDK pour développer c'est normal, d'où l'intérêt de passer par la ligne de commandes dans ce cas. Mais le reste du système doit rester inchangé.
C'est à toi qu'il appartient de fournir à l'utilisateur un package qui contient à la fois le jar et la JVM qui le fait tourner, avec exactement la même version que celle testé lors du développement.
Le .exe obtenu fera plus ou moins la même chose que ce que tu fais en ligne de commandes, mais au sein d'un environnement maîtrisé lors du packaging.
Non, le problème c'est que tu ne tiens pas compte de mes réponses.
Au cours de nos deux discussions j'ai mentionné à trois reprises (ici, ici et là) qu'il fallait packager ton application. C'est à dire que tu ne devrais pas te retrouver à cliquer sur un .jar mais sur un .exe
Aucun utilisateur, même développeur, ne devrait avoir à réinstaller un JDK à chaque fois qu'il essaye d'exécuter une application Java. Que tu ais plusieurs JDK pour développer c'est normal, d'où l'intérêt de passer par la ligne de commandes dans ce cas. Mais le reste du système doit rester inchangé.
C'est à toi qu'il appartient de fournir à l'utilisateur un package qui contient à la fois le jar et la JVM qui le fait tourner, avec exactement la même version que celle testé lors du développement.
Le .exe obtenu fera plus ou moins la même chose que ce que tu fais en ligne de commandes, mais au sein d'un environnement maîtrisé lors du packaging.