Le mystérieux java.exe était la cause de l'incapacité de faire correspondre les versions javac et java encore et encore.

environnement

Acheté auprès de: Mouse Computer Co., Ltd. Ordinateur portable / bureau: PC de bureau Système d'exploitation: Windows 10 Famille 64 bits Processeur: processeur Intel (R) Core (TM) i5-7400 (4 cœurs / 4 threads / 3,00 GHz / To jusqu'à 3,50 GHz / 6 Mo de mémoire cache) Mémoire: 16 Go (8 Go au moment de l'achat) Disque dur: disque dur de 1 To (compatible 7200 tr / min / 6 Gbps) SSD: aucun Graphiques: Intel HD Graphics 630 Date de mise en œuvre des contenus suivants: 12 novembre 2019

Erreur d'exécution dans Hello world

J'ai décidé de commencer à étudier Java, j'ai donc installé Eclipse et JDK pour créer un environnement et traduit Eclipse en japonais. Je voulais sortir immédiatement "Hello world", donc j'ai presque sauvegardé le code copier-coller dans Hello.java. > javac Hello.java Compilé avec succès. > java Hello Je l'ai couru, mais une erreur s'est produite.

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: Hello has been compiled by a more recent version of the Java Runtime (class file version 57.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

Selon l'enquête, si les versions de «javac (JDK)» et «java (JRE)» sont différentes (en particulier cette dernière est plus ancienne), une telle erreur se produira. Quand j'ai vérifié la version,

> javac -version
javac 13.0.1

> java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) Client VM (build 25.231-b11, mixed mode)

Après tout, c'est différent. Je pensais que le JRE que j'avais installé à l'origine était plus ancien, je l'ai donc mis à jour du site officiel vers la dernière version, mais l'affichage de la version ne change pas. Par conséquent, j'ai désinstallé tous les Java liés (JDK, JRE) du "Panneau de configuration" -> "Désinstaller le programme", et supprimé tous les chemins qui semblaient être liés à partir de "Paramètres des variables d'environnement". Après cela, j'ai réinstallé le JDK (il semble que le JRE sera inclus en même temps) et re-passé le chemin, mais l'affichage de la version ne change pas.

Lorsque je les ai désinstallés tous les deux et que j'ai exécuté la commande de vérification de version avec Java pas complètement installé, ce qui suit était affiché.

> javac -version
'javac'Est une commande interne ou externe,
Non reconnu comme programme opérationnel ou fichier de commandes.

> java -version
Error: opening registry key 'Software\JavaSoft\Java Runtime Environment'
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.

La commande elle-même semble être invalide pour javac, mais java est-il reconnu comme une commande et une erreur se produit?

Découvrez le mystérieux java.exe

À ce moment, je me suis souvenu que certains des chemins supprimés liés à Java étaient inconnus (certainement C: \ ProgramData \ Oracle \ Java), et lorsque j'ai ouvert ce dossier, qiita_java.png Il y avait java.exe qui aurait dû être complètement effacé. La date et l'heure de mise à jour correspondent à la date d'achat du PC. Est-ce celui qui était inclus à l'origine? J'ai examiné de plus près la liste «Désinstaller un programme», mais je n'ai pas trouvé de programme correspondant. J'ai changé le nom du dossier "Oracle" en "Oracle_nazonojava" et ai exécuté à nouveau la commande d'information de version de java.

> java -version
'java'Est une commande interne ou externe,
Non reconnu comme programme opérationnel ou fichier de commandes.

Comme javac, la commande elle-même n'est plus reconnue. J'aurais dû supprimer le chemin d'accès au dossier modifié (à la fois de la variable d'environnement utilisateur et de la variable d'environnement système), mais pourquoi le résultat de la commande change-t-il lorsque le nom du dossier est modifié? En fait, Path peut avoir réussi (manque d'étude).

Lorsque j'ai réinstallé le JDK dans cet état, les versions correspondaient avec succès (java a changé pour la même version que javac).

> javac -version
javac 13.0.1

> java -version
java version "13.0.1" 2019-10-15
Java(TM) SE Runtime Environment (build 13.0.1+9)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)

"Hello world" a également été compilé et exécuté avec succès.

finalement

Lorsque j'ai recherché sur Google, il y avait des cas où les versions de java et javac étaient différentes, mais toutes ont été résolues en réinstallant, et je ne pouvais pratiquement rien trouver de similaire à cet exemple. (Le seul cas où la version Java reste 1.8.0_231, quel que soit le nombre de réinstallations, ce qui est presque le même que cette fois, existait en tant que cache Google de la question Yahoo! Chiebukuro (supprimée).) Cela peut être un gros problème qui dépend de l'environnement (acheteur de PC?), Mais il peut y avoir des gens qui ont des symptômes similaires, je vais donc l'écrire sous forme d'article.

Recommended Posts

Le mystérieux java.exe était la cause de l'incapacité de faire correspondre les versions javac et java encore et encore.
[CentOS8] Puisque la commande javac n'a pas pu être utilisée, installez l'environnement de développement java.
"Java.lang.NoClassDefFoundError: Impossible d'initialiser la classe java.nio.file.FileSystems $ DefaultFileSystemHolder" se produit même s'il n'y a pas de problème pour vérifier le chemin de la classe et l'encodage plusieurs fois.
Pourquoi Java était la langue cible que je déteste