JDK 11 compila o arquivo com sucesso e a JRE 1.8.X não consegue rodar o programa

Print do terminal:

To no terminal do linux opensuse, compilo o arquivo java com o JDK11 beleza tudo certo
Gera o class, quando vou rodar aparece um erro enorme mencionando a JRE
Provavelmente é a versão do JRE, mas e se não tem JRE11, senta e chora?
Vou nem dormir direito hoje, alguém me ajude por favor
Mensagem do erro:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread “main” java.lang.UnsupportedClassVersionError: SGE has been compiled by a moresion 55.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)

Vc não pode instalar o JRE 11 de forma alguma no computador em que vai rodar o programa?

Pela saída do seu java -version acredito que não esteja usando o OpenJDK, vc bem que poderia testá-lo. Vc pode encontrar os instaladores, tanto pra x86 como para x64 e tanto JDK quanto apenas o JRE no link abaixo:

Vc pode baixar a versão em .zip ou a .msi que é um instalador. O legal desse instalador é que até o Path ele configura pra vc.


Se isso realmente não resolver o seu problema, vc poderia tentar compilar seu código assim:

javac Main.java --release 8

Dessa forma vc consegue compilar com Java 11 e executar com Java 8, mas seu código só pode conter coisas que estejam presentes na versão 8 senão vai dar erro de compilação. Por isso, nada de usar coisas como a palavra chave var que só apareceu no Java 10 e nem métodos como String.isBlank() que só apareceu no Java 11.

1 curtida

o openSUSE tem o openjre 11, eh que se nao me engano ele ja vem por default instalado o openjdk 1.8. mas voce pode alterar as variaveis de ambiente para que ele funcione. Eu por exemplo uso o RegataOS uma distro brasileira baseada em openSUSE, e rodo de boas as versoes 11 e 1.8 nao estou tendo problemas. Mas adicionei no meu eclipse, as outras versoes.