Não é possível executar o programa Java: UnsupportedClassVersionError

4

Instalei o JDK 6, mas não consigo executar um programa em Java.

Por exemplo, eu fiz test.java. Eu compilo com javac tes.java e não há erro quando eu compilo, mas quando eu quero executar esse programa sempre exibe um erro. Eu executo o programa Java com java tes .

Exception in thread "main" java.lang.UnsupportedClassVersionError: tes : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: tes. Program will exit.

Minha versão do javac é 1.7.0, minha versão do java é 1.6.0.

Aqui está o meu código tes.java :

class tes{

    public static void main(String[]args){
        System.out.println("hello");    
    }   

}
    
por Ricko Devian 02.12.2011 / 04:09

6 respostas

5

Parece que você compilou a fonte Java com uma versão mais recente do Java (7) que não pode ser executada pelo Java runtime mais antigo (6). Se você não precisa / quer Java 7, desinstale o pacote openjdk-7-jdk e instale openjdk-6-jdk :

sudo apt-get remove openjdk-7-jdk
sudo apt-get install openjdk-6-jdk

A alternativa é usar os caminhos diretos para as versões específicas do compilador ou do tempo de execução:

Executando o tempo de execução do Java 7

É possível que o Java 6 ainda seja o padrão (compatibilidade com programas mais antigos?). Para forçar o uso do tempo de execução do Java 7, use o caminho direto para ele:

/usr/lib/jvm/java-7-openjdk-amd64/bin/java tes

(substitua amd64 por i386 pela versão de 32 bits do Java)

Executando o compilador Java versão 6

Se você deseja ter o código compilado para o Java versão 6, use o caminho completo para o compilador Java 6:

/usr/lib/jvm/java-6-openjdk/bin/javac tes.java

Alternativas

Como eu disse antes, se você não gostar da versão 7 ou 6, desinstale-a ( openjdk-7-jdk e openjdk-7-jre para a versão 7, openjdk-6-jdk e openjdk-6-jre para a versão 6). É possível ter ambas as versões instaladas. Use o sistema de alternativas para configurar o padrão. Execute os comandos abaixo para configurar o tempo de execução e o compilador. Ele fornecerá a você uma opção para o padrão.

sudo update-alternatives --config java
sudo update-alternatives --config javac
    
por Lekensteyn 06.04.2012 / 18:14
2

Por favor, dê uma olhada neste link do Java.net link

Em resumo, isso acontece quando você está compilando seu código com uma versão do JDK, mas depois tenta executar o código compilado em uma versão mais antiga do JDK. Então, por exemplo, se você compilar seu código com o JDK6, mas tentar executá-lo com o JDK5, você receberá este erro.

Se você estiver compilando e executando o test.java no mesmo PC, compare as saídas dos seguintes comandos. Eu acredito que eles vão dar números de versão separados.

javac -version
java -version

Se você está compilando em um PC e depois rodando em outro, então compare a saída do primeiro comando do PC onde você compila para a saída do segundo comando do PC onde você executa o programa.

Também ajudaria se você adicionar esta informação de versão à sua pergunta.

    
por binW 02.12.2011 / 10:21
1

Cada arquivo de classe gerado tem uma versão principal e secundária. Porque o jvm em particular suporta um intervalo que vem dentro da versão principal e secundária. Então, o seu arquivo de classe compilado tem a versão superior, então o seu suporte jvm. Agora você tem duas opções, você pode usar "1.6 java compiler" ou "1.7 java".

    
por Arham 22.06.2012 / 10:59
1

Tendo tentado todos os itens acima, se ainda não funcionar. Tente executar o arquivo nos comandos abaixo:

javac tes.java
java -cp "." tes

Esse tipo de erro é observado quando a variável CLASSPATH não está definida. Até eu tive o mesmo problema. Não foi possível executá-lo. Com os comandos acima, funcionou.

Para mais informações sobre CLASSPATH .

    
por Ashwin 28.10.2012 / 06:46
0

Você escreveu que tentou compilar o arquivo test.java com javac tes.java - isso não funcionará independentemente do seu JDK porque o nome do arquivo *.java deve corresponder ao nome de sua classe; e eu suponho que não há tes.java file . Então, javac test.java funciona?

Informações adicionais da javac manpage:

"Os nomes dos arquivos de código-fonte devem ter sufixos .java, os nomes de arquivo de classe devem ter sufixos .class e os arquivos de origem e de classe devem ter nomes raiz que identifiquem a classe. Por exemplo, a < strong> class chamado MyClass seria escrito em um arquivo chamado MyClass.java e compilado em um arquivo de classe bytecode chamado MyClass.class . "

    
por tohuwawohu 02.12.2011 / 10:09
0

Use sudo update-alternatives --config java e defina a versão que você deseja usar.

    
por false9striker 23.07.2012 / 14:12

Tags