No CMD eu consigo compilar mas não consigo executar o arquivo compilado

Boa noite pessoal,

Sou novo nos estudos de programação e comecei agora a estudar JAVA online no curso da Loiane e ela me indicou o GUJ em uma de suas aulas, por isso que eu entrei aqui e tenho meu primeiro problema de iniciante.

Estou tentando usar o JAVA no prompt do DOS e aparentemente eu configurei tudo certinho.

Quando eu digito java -version ele mostra o seguinte:

C:\curso-java-basico\aula05>java -version
java version “1.8.0_271”
Java™ SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot™ 64-Bit Server VM (build 25.271-b09, mixed mode)

quando eu digio javac -version ele mostra o seguinte:

C:\curso-java-basico\aula05>java -version
java version “1.8.0_271”
Java™ SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot™ 64-Bit Server VM (build 25.271-b09, mixed mode)

usei o Sublime text para escrever meu exercicio com o seguinte código:

class Argumentos{

  • public static void main (String[] args){*
  •   System.out.println("Voce digitou" + args[0]);*
    
  • }*
    }

compilei pelo DOS e deu certo, gerou o arquivo .class corretamente.

C:\curso-java-basico\aula06>javac Argumentos.java

C:\curso-java-basico\aula06>

Agora eu tento executar e aparece a seguinte mensagem:
C:\curso-java-basico\aula06>java Argumentos
Error: A JNI error has occurred, please check your installation and try again
Exception in thread “main” java.lang.UnsupportedClassVersionError: Argumentos has been compiled by a more recent version of the Java Runtime (class file version 59.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)

Alguém poderia me ajudar? Obrigado.

Desculpa pessoal, mas acho que consegui resolver o problema sozinho.

Pelo visto o javac é o compilador, e o java é o que executa a aplicação java.

Porém a versão javac é a do java 15 e a versão do java.exe é a do java8, ambas versões diferentes instaladas no mesmo SO. Quando eu tentava executar a aplicação ele estava usando o java,exe de uma versão antiga (Java 8) mas como foi compilado pelo javac (Java 15) houve incompatibilidade de versão. Se fosse o contrário talvez não haveria problema. Compilar numa versão antiga e abrir em um java de uma versão nova. Mas como foi compilado numa versão nova e tentado abrir a aplicação numa versão antiga ocorreu o erro.

Solução que eu encontrei, não sei se fiz da forma mais correta mas eu fiz.

Voltei nas variáveis de ambiente e encontrei um caminho lá que apontava para uma pasta no Windows:

C:\ProgramData\Oracle\Java\javapath

Dentro desta pasta encontrei 3 atalhos para o Java8:

java
javaw
javaws

no caso eu renomeei o arquivo java para javaasdf, e depois eu crei um novo atalho com arquivo java dentro desta pasta direcionando o caminho para o java.exe do Java15, ou seja, da mesma versão que eu usei para compilar o java. Então eu executei e a aplicação funcionou!

Eu não tenho experiência com programação, mas tinha experiência como suporte mas fazia tempo que eu não mexia com essas coisas, mas até que deu certo! kkk Se alguém souber uma forma mais polida de resolver isso, por favor, aceito sugestões. Obrigado!

Exatamente, javac é o compilador e java é a máquina virtual Java.

Você pode compilar com o Java 15 passando o parâmetro -target 1.8, aí o .class será compatível com seu Java 8.

1 curtida