11
respostas

Incompatibilidade entre JRE e JDK

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: br/com/bytebank/banco/teste/TesteArrayString has been compiled by a more recent version of the Java Runtime (class file version 58.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(ClassLoader.java:756)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)

Novamente, tentei fazer no Terminal do Mac o que o Nico estava fazendo, mas há incompatibilidade. Falei sobre isso anteriormente no Fórum, porém a única resposta que obtive foi que o JDK era versão 14, enquanto o JRE era versão 8. Entretanto, o problema eu entendi: existe uma incompatibilidade entre JDK e JRE. A minha pergunta é: como eu posso resolver essa incompatibilidade, afinal faz apenas algumas semanas que eu baixei o Eclipse para usar no curso de Java?

Eu vi que há em Preferências>Java uma opção de versões para JRE. Lá, há uma tabela de Execution Environments e JREs compatíveis. Não sei se é ali que resolvo o problema. Tentei alterar algumas coisas, e o problema aparentemente continua. Isso deveria ter resolvido o problema ou eu tenho que baixar outra versão ou algo do tipo?

Levem em consideração que sou iniciante e não sei como mexer nas coisas. Além disso, só estou tentando resolver isso porque um usuário me respondeu que pode ser necessário no futuro que eu acione os arquivos por meio do Terminal, que eu nunca havia usado antes de entrar no curso da Alura.

11 respostas

Você vai precisar verificar se o java está instalado corretamente. Comece executando no seu terminal mac o comando java -version e mande aqui. Outra coisa, você consegue executar pelo eclipse normalmente?

Quando eu digito java -version no Terminal, aparece isso.

java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

Nos exercícios dentro do Eclipse, não há problema ao rodar. Dá esse erro indicado de incompatibilidade só quando, no Terminal, eu tento executar algum código do Eclipse.

Eu até dei uma olhada na Internet, e parece que é um problema que acontece por bagunça nos arquivos, talvez depois de alguma atualização. Vi que no Windows dá pra mudar a ordem das pastas ou algo assim. Mas no Mac não entendi onde tenho que mexer, se no Eclipse ou se nas pastas.

Nas minhas pastas, há duas pastas de JDK em JavaVirtualMachines, uma 1.8_241, outra 1.8_271. Parece que eu estou usando esta última. Mas o JDK parece que foi para uma versão muito mais atualizada, que possivelmente está localizada em outro lugar. Não sei explicar isso exatamente, mas é a impressão que eu tive ao mexer nas preferências do Eclipse.

Não faço a menor ideia de como solucionar, mas certamente alguns usuários já resolveram esses problema anteriormente. Inclusive, aqui no fórum há várias pessoas relatando caso semelhante. Como disse anteriormente, acho que seria o caso de alguém da Alura centralizar uma explicação que servisse para todos esses casos, que devem ser inúmeros.

Verifica também, javac -version e aonde sua variável de ambiente JAVA_HOME aponta.

java -version dá isso:

 ~ javac -version
javac 1.8.0_271

Agora, esse negócio de JAVA_HOME já não sei do que se trata. Vi na Internet que tem algo a ver com isso, mas aí já não entendo. Talvez você possa me explicar o que fazer.

  • JAVA_HOME se trata da variável de ambiente do Windows (S.O. em geral) onde o S.O. "pega" ao caminho de onde determinado recurso se encontra, nesse caso onde se encontra o Java. Inclusive , provavelmente, esse é o motivo da confusão, você deve estar compilando em uma versão do Java (14) no eclipse e tentando executar em outra (1.8) pelo terminal do S.O. .Tente executar isso no powershell echo $ENV:JAVA_HOME
  • talvez seja valido você dar uma revisada nesse conteudo https://cursos.alura.com.br/course/primeiros-passos-com-java/task/2061

Bom, quanto a esse curso linkado, eu não tenho acesso a ele não.

Quanto à explicação, quando digo que sou iniciante isso significa que não faço a menor ideia do que é powershell ou S.O., por exemplo. Esses termos se referem só ao Windows? Eu estou usando Mac...

Quanto ao motivo do erro, realmente, o erro se dá porque o compilador é versão 14 e o JRE versão 8, como eu relatei no início. Minha dúvida, no caso, se refere a como corrigir essa incompatibilidade.

Aparentemente, eu instalei o JDK 8, seguindo as instruções do Paulo, mas o Eclipse atualizou e começou a usar a versão 14 do compilador, sem que o Java tenha atualizado.

Se eu não encontrar outra resposta, vou tentar atualizar o Java para versão 14, de modo a igualar a versão com a do compilador. Será que é possível fazer essa atualização sem causar danos nos arquivos que eu estou usando no Eclipse durante o curso. Imagino que não, mas essa era minha dúvida inicial, no final das contas...

Eu pensei que vc tivesse, inclusive recomendo a assinatura da Alura (não recebo nada deles, mas acho o conteúdo bom. Paga nóis Alura).

Quanto aos termos, eles realmente são muitos, tantos que as vezes até se repetem rs, mas fazem parte do dia a dia e é necessário entende-los, isso demora um tempo, claro, busque no google (pela nossa conversa noto que vc já faz isso). Java não é a melhor opção para quem está engatinhando, é muito burocrático como você pode perceber.

Informações importantes essas do S.O., você usa Mac, eu me confundi com outra pergunta aqui do fórum, você precisa conferir a variável de ambiente assim echo $JAVA_HOME (poste o resultado).

Para testar de outra forma tente criar, compilar e executar um .java direto no terminal. 1- você deve criar um arquivo Teste.java, classe comum com um System.out.println com no metodo main; 2- compile com javac Teste.java; 3- execute com java Teste.java.

Compartilhe um print do seu build path do eclipse. build path

"Quanto ao motivo do erro, realmente, o erro se dá porque o compilador é versão 14 e o JRE versão 8, como eu relatei no início. Minha dúvida, no caso, se refere a como corrigir essa incompatibilidade."

Fiquei com o mesmo problema, já postei no fórum anteontem.

"Bom, quanto a esse curso linkado, eu não tenho acesso a ele não." Também não.

" eu me confundi com outra pergunta aqui do fórum" - provavelmente meu.

Acompanhando para ver resolução.

Sim James, eu pedi pra fazer um teste na sua pergunta

RAFAEL

estou no Windows 10

Resolvi o problema atualizando para Java 15

Eu nem tinha visto sua resposta, mas acabei de atualizar para o Java SE 15 também (para Mac), e aparentemente o erro foi corrigido. Acredito que o problema tenha sido o que mencionei acima. O Java SE 8, que na época era recomendado pelo Paulo, deve dar pau com a atual configuração do Eclipse – ou talvez comece a dar pau quando o Eclipse é atualizado, algo assim.

Talvez fosse o caso de o pessoal da Alura fazer essa observação em algum lugar visível. O compilador das versões mais recentes de JDK prepara um código que não é lido pela JVM das versões mais antigas. O erro acima diz que, pelo menos, versão 8 da JRE não lê código de compilador da versão 14. Só não sei como o compilador versão 14 estava sendo usado, uma vez que as duas versões de JDK instaladas eram 8. Minha impressão é que o Eclipse instala por conta própria uma versão mais recente em algum lugar.

Eu realmente demorei um pouco pra atualizar o Java SE porque estava tentando resolver o erro dentro do Eclipse.

Quanto aos cursos disponíveis, eu sou professor do Estado do Paraná, e aqui o Governo do Estado pagou por um percurso específico para professores e alunos. Na verdade, havia umas cinco opções, mas eu escolhi Java porque me pareceu que era algo introdutório às outras linguagens. Não sei se eu fui muito sem noção.

Com relação a alguns comandos no Terminal, eu realmente ainda fico boiando, como no caso do JAVA_HOME. Acho que entendi o conceito. Parece que há como descobrir qual o caminho eu sigo até chegar à pasta com os arquivos Java. No entanto, eu não entendi como fazer isso não. Às vezes eu me pergunto como a molecada aprende essas coisas, se existe algum curso sobre isso ou se o pessoal aprende na raça, detalhe por detalhe...