JRE 1.7 - versão java - retorna: java / lang / NoClassDefFoundError: java / lang / Object

135

Ao executar qualquer aplicativo java, ou apenas 'java', a jvm falha:

Ocorreu um erro durante a inicialização da VM
java / lang / NoClassDefFoundError: java / lang / Object

Aqui está uma lista de respostas erradas :

  1. O diretório inicial Java correto, incluindo o diretório / bin, está no PATH global

  2. JAVA_HOME está definido corretamente

  3. Executar o comando java -fullversion works

    $ java -fullversion
    
    ./java full version "1.7.0_05-b05"
    
  4. Os links simbólicos em / usr / java apontam para a instalação correta do java

  5. Não instalei nenhum java 'padrão' quando criei o sistema

  6. java -version falha ... o mesmo erro acima

  7. A emissão dos comandos sob a estrutura de diretórios da instalação java também não funciona

  8. Este é um java de 64 bits para um de 64 bits.

Alguma ideia?

Tux Skywalker
fonte
2
Parece que há um problema ao carregar o rt.jararquivo, o que é exigido JVMno momento do carregamentoJRE
Bhavik Ambani
talvez alguns problemas relacionados à permissão?
Mark Bramnik
executar pequena / strace para ver qualquer falta de arquivos / permissões de arquivo
Jayan
inbytebg.com/techblog/?p=189 , no primeiro comentário há um truque hex para corrigir o instalador
Sebastian

Respostas:

186

Esse problema decorre de uma instalação incorreta do Java.

Possibilidade 1

NOTA: Este cenário se aplica apenas ao Java 8 e anteriores. A partir do Java 9, o JRE está estruturado de maneira diferente. O rt.jar e os amigos não existem mais e o Pack200 não é mais usado.

A biblioteca padrão Java está contido em vários JARs, como rt.jar, deploy.jar, jsse.jar, etc. Quando o JRE é embalado, esses arquivos JAR críticos são compactados com Pack200 e armazenados como rt.pack, deploy.pack, jsse.pack, etc. instalador do Java é suposto eles descomprimir. Se você está tendo esse erro, aparentemente isso não aconteceu.

Você precisa executar manualmente unpack200todos os .packarquivos nos JREs lib/e lib/ext/pastas.

janelas

Para descompactar um .packarquivo (por exemplo rt.pack), execute:

"%JAVA_HOME%\bin\unpack200" -r -v rt.pack rt.jar

Para descompactar todos os .packarquivos recursivamente , na execução raiz do JRE:

for /r %f in (*.pack) do "%JAVA_HOME%\bin\unpack200.exe" -r -q "%f" "%~pf%~nf.jar"

* nix

Para descompactar um .packarquivo (por exemplo rt.pack), execute:

/usr/bin/unpack200 -r -v rt.pack rt.jar

Para descompactar todos os .packarquivos recursivamente , na execução raiz do JRE:

find -iname "*.pack" -exec sh -c "/usr/bin/unpack200 -r -q {} \$(echo {} | sed 's/\(.*\.\)pack/\1jar/')" \;

Possibilidade 2

Você desinstalou o Java de alguma outra maneira. Talvez você tenha instalado sem direitos de administrador ou tenha tentado simplesmente extrair arquivos do instalador. Tente novamente com o instalador e / ou mais privilégios. Ou, se você não quiser usar o instalador, use o .tar.gzpacote Java.

Rigg802
fonte
2
Esta é uma pergunta do Solaris, não do Windows.
Robin Kanters
1
Esta solução ajudou se você acabou de baixar o arquivo java linux e não deseja usar scripts de instalação.
PotOfTea 30/07/2013
23
@ Robin Kanters, já que esta mensagem exata de problema / erro, seus sintomas e formas de corrigi-lo são independentes de plataforma. Esta é uma pergunta sobre Java RE, não sobre Solaris.
1
confirmar a ter este problema no Windows depois de java fiz alguma atualização automática
Lassi Kinnunen
5
Eu sempre uso for %i in (*.pack) do (..\bin\unpack200 "%i" "%~ni.jar" & del "%i")(talvez um dia eu o torne um pouco mais robusto para não precisar alterar manualmente o caminho, mas, novamente, eu normalmente apenas uso a .gzliberação do JRE que não os compacta. )
Synetech 11/11
31

Para Java 8 em um sistema operacional * nix, vá para <jdk root>/jre/lib(para mim /usr/java/jdk1.8.0_05/jre/lib). Nesse diretório, execute:

../../bin/unpack200 rt.pack rt.jar
../../bin/unpack200 jsse.pack jsse.rar
../../bin/unpack200 charsets.pack charsets.jar

Para evitar problemas de versão, caso você tenha outro JRE instalado, use o mesmo unpack200que acompanha o JRE que você está corrigindo - ou seja, na linha de comando, use ../../bin/unpack200(para mim, isso se expande para /usr/java/jdk1.8.0_05/bin/unpack200), não apenas unpack200.

betontalpfa
fonte
3
Para desenvolver você tem que descompactar alguns outros pacotes: na "<jdk1.8_root>/lib" ../bin/unpack200 tools.pack tools.jarna"<jdk1.8_root>/jre/lib/ext" ../../bin/unpack200 jfxrt.pack jfxrt.jar ../../bin/unpack200 localedata.pack localedata.jar
betontalpfa
Alguns scripts podem ser encontrados aqui para descompactar todos os frascos ausentes de um JDK extraído manualmente: stackoverflow.com/questions/2203922/…
Kloe2378231
Este foi o problema no meu caso. Estou usando o Ubuntu 18.04. Obrigado!
Boncho Valkov
13

Parece que, para uma arquitetura de 64 bits, é necessário instalar a versão de 32 bits e a versão de 64 bits do jre (arquivos independentes de arquitetura como rt.jar são distribuídos apenas na versão de 32 bits).

Lembre-se de prestar atenção para incluir o executável java correto na variável de ambiente global PATH.

Tommaso
fonte
3
Onde você conseguiu isso architecture independent files as rt.jar are distributed only in the 32-bin version?
Aleksandr M
Eu só examinou o conteúdo da distribuição
Tommaso
+1 Sim, você está correto. O rt.jar não está incluído no pacote jre para solaris de 64 bits.
Aleksandr M
3
Para adicionar a isso - deparamos com isso ao fazer uma instalação manual no SmartOS. Siga as instruções encontradas em blogs.oracle.com/thefield/entry/solaris_11_jdk_installation (na maior parte) e você estará bem.
21413 Khushil
Instalei os dois pacotes jdk-7u79-solaris-sparcv9.tar.Z e jdk-7u79-solaris-sparc.tar.Z. Agora parece que está funcionando. Ty.
Alex Pi
11

Solução rápida para pessoas impacientes;) Nas máquinas Windows , tente o seguinte: Vá para o C:\Windows\System32diretório e exclua java.exe(ou renomeie para algo como java.exe.old).

Desde pelo menos 1.6, não deve haver um java.exeno diretório do Windows. Se houver, é uma sobra de alguma coisa.

Um pouco mais de leitura:

Estou realmente surpreso que uma pergunta de 2012 ainda não tenha uma resposta aprovada e, na verdade, encontrei o mesmo problema em 2015 no meu sistema operacional Win 7 de 32 bits!

Então o que aconteceu?

Basicamente, tudo estava funcionando bem, baixei o banco de dados H2 e, quando tentei iniciar H2 Console (Command Line), obtive:

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

Encontrei esta pergunta e consegui confirmar os mesmos sintomas:

JAVA_HOME está definido corretamente:

echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26

java -versionfalha, enquanto java --fullversionfunciona bem:

java -fullversion
java full version "1.6.0_45-b06"

SOLUÇÃO: Vá para o C:\Windows\System32diretório e exclua (na verdade, renomei) o java.exearquivo !!!!

Agora eu recebo:

java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)

e H2 Console (Command Line)funciona bem também!

Os créditos vão para a última postagem neste fórum: https://bukkit.org/threads/java-lang-noclassdeffounderror-java-lang-object.70450/

iaforek
fonte
Eu também estou enfrentando esse problema, mas parece que no seu caso você está simplesmente usando uma versão mais antiga do java. 1.6.0_26! = 1.6.0_45, sua versão mais antiga provavelmente não apresenta o problema.
Centimane
Bem manchado! Eu tenho o JDK 1.6.0_26 instalado e essa versão "mais recente" veio da pasta Windows System32. Ambos estão na variável de ambiente PATH e, na verdade, não quero usar o Java Runtime fornecido pelo Windows. Portanto, excluí-lo resolveu o problema. Talvez você tenha dois tempos de execução do java no seu PATH também?
precisa saber é
Para mim, minha instalação estava ausente do rt.jar (que é onde você encontra o java.lang.Object). Infelizmente, quando instalo o RPM a partir do kickstart, ele está ausente do rt.jar, mas se eu instalar depois dele, será um problema engraçado.
Centimane 3/15
Não posso ajudá-lo com RPMs. Me desculpe por isso.
precisa saber é
4
Para mim, os links simbólicos para java in C:\ProgramData\Oracle\Java\javapathestavam causando o problema. Eu mudo a variável de ambiente PATH e agora funciona.
precisa saber é o seguinte
10

Eu baixei o novo JDK hoje (1.8.0.73) c:> java.exee comecei o infame:

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

Eu só queria compartilhar minha solução de trabalho aqui.

Quando entrei na jdk\binpasta, o Java funcionava bem, então eu sabia que era o PATH. Comecei PATHa apenas \jdk\binno CMD para provar isso e funcionou.

Então, uma das pastas no PATHdeve ter tido java.exeque estava causando o conflito, pensei. Como se viu, foi o C:\>ProgramData\Oracle\Java\javapathque mantém links simbólicos para os executáveis.

java.exeestava apontando para jre\bin. O arquivo estava corrompido quando eu comecei \jre\bin\java.exe- exatamente o mesmo erro. Bingo. Reinstalei o JRE e o problema foi resolvido. Feliz codificação ...

atacante
fonte
8

Você provavelmente está perdendo um arquivo chamado rt.jar em sua instalação, que possui o arquivo de classe para java.lang.Object. Verifique seus arquivos de instalação, etc.

Em particular, observe que um instalador de 64 bits se sobrepõe (ou instala "próximo a") uma instalação de 32 bits existente. Em outras palavras, para obter uma instalação de 64 bits totalmente funcional, você deve primeiro executar a instalação de 32 bits e seguir com uma instalação de 64 bits se tiver uma máquina com capacidade de 64 bits ...

Se, em vez disso, você fizer apenas uma instalação de 64 bits, alguns arquivos estarão faltando na instalação e ocorrerão erros como o descrito acima.

user3213415
fonte
Faz parte da resposta. Você precisa descompactar todos os arquivos * .pack dentro do diretório / lib e lib / ext do seu caminho do Java SDK. O unpack200 pode ajudá-lo com isso. Por favor, veja o comentário de Rigg802.
usar o seguinte comando
7

No Windows 10, eu estava enfrentando o mesmo problema com o JRE 1.8 (8u121).
Digitando

java -version

o prompt do cmd retorna

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

Todos os outros comandos, echo %JAVA_HOME%, echo %JRE_HOME%, echo %PATH%, java -fullversionfuncionou bem.

Indo para variáveis ​​de ambiente no painel de administração do sistema, remova do PATH o link C:\ProgramData\Oracle\Java\javapathe certifique-se de ter configurado no PATH o link C:\Program Files\Java Folder\bin.

Depois disso, verifique se C:\Windows\System32existe um java.exearquivo; se verdadeiro, exclua esse arquivo.

Digitar agora java -versionfunciona bem.

Francesco Marchitelli
fonte
2
Eu tenho o mesmo problema após a atualização do Windows, no entanto, não tenho pasta C:\Program Files\Java Folder\bin. Em vez disso, eu uso, C:\Program Files\Java\jdk1.8.0_161\binmas não me ajuda de qualquer maneira. Não há arquivo java.exe na pasta System32
Tom
6

Esse problema ocorre quando você instala o JDK por _uncompressing_ele, em vez _executing_dele.

Por exemplo:

unzip jdk-6u45-linux-x64.bin  (wrong)

sh ./jdk-6u45-linux-x64.bin   (right)

No primeiro cenário, as bibliotecas de tempo de execução, como rt.jar, não ficam automaticamente descomprimidas (portanto, você pode encontrar os arquivos rt.pack, etc., em vez dos arquivos .jar).

kdn
fonte
4

Eu tive o mesmo problema recentemente. No meu caso, minha máquina com Windows 7 baixou automaticamente o java e adicionou C:\ProgramData\Oracle\Java\javapathao início da variável de ambiente do meu caminho, o que atrapalhou meu java. Depois de me livrar disso do caminho, funcionou.

developer747
fonte
3

se você executar "chmod u + rx" no binário java e executá-lo, ele descompactará os arquivos jar e você poderá executar uma versão java sem erros de tempo de execução

Peter Nielsen
fonte
3

Você não pode instalar apenas os 64 bits, primeiro instale os 32 bits e adicione os componentes de 64 bits.

Em java.com:

Instalar o JRE em um sistema de 64 bits que permita uma JVM de 32 bits é um processo de duas etapas: primeiro instale o JRE de 32 bits e, em seguida, instale o suporte adicional para operações de 64 bits. Os nomes dos arquivos são os seguintes:

Andrew Speer
fonte
O OP não menciona nada sobre a execução da JVM de 32 bits em um sistema de 64 bits ...?
precisa saber é o seguinte
1

Se você instalar uma versão de 64 bits sem instalar primeiro 32 bits, esse erro ocorrerá apesar de corrigir todos os outros problemas. Eu tenho uma nova máquina Windows 10 Pro de 64 bits Dell i7 executando o Java 8u71. Depois de adicionar meu% path% e% classpath% às variáveis ​​de ambiente e tentar várias outras correções, desinstalando 64 bits, instalando 32 bits e reinstalando 64 bits, corrigi-lo.

Alguns dos problemas, como não ter seus arquivos descompactados etc. que foram mencionados como possíveis causas ainda podem estar causando problemas, mas se você não fizer isso também, as outras correções não funcionarão.

Bryan Robinson
fonte
1

No meu caso, eu uso o Windows 8.1 (jdk1.8.0_77 instalado), fiz três coisas:

  1. Eu apaguei jdks anteriores
  2. Renomeei o arquivo java.exe dentro de C: \ Windows \ System32
  3. Também removi C: \ ProgramData \ Oracle \ Java \ javapath no meu PATH (eco% PATH%)

e voila consertou!

kashogi
fonte
0

Outra resposta poderia ser usar o arquivo tar.gz no caso do Linux. Parece haver algo assim também para a plataforma solaris. Dessa forma, todos os arquivos já estarão no formato esperado e não haverá problemas de descompactação.

Rítmico
fonte
Como assim, use o arquivo tar.gz?
Koray Tugay
Considerando que eu respondi isso há cerca de 2,5 anos, tive que dar uma olhada no site de download do java. Lá, você tem a opção de baixar o java como empacotado como .rpm para o LinuX. Acho que tentei antes e tive problemas. O download do arquivo tar.gz funcionou melhor, pois tinha todo o conteúdo no formato de arquivo desejado.
precisa saber é o seguinte
0

Eu tenho alguns problemas nas instalações do Linux x86_64 com o JDK 1.7.0_40 i586. Eu descobri que o problema é que o rpm não pode descompactar arquivos jar, conforme mencionado pelo Rigg802 (embora o rpm conclua a marcação de sucesso):

Unpacking JAR files...
        rt.jar...
/var/tmp/rpm-tmp.zLzkkb: /usr/java/jdk1.7.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
Error: unpack could not create JAR file:

        /usr/java/jdk1.7.0_40/jre/lib/rt.jar

O arquivo /lib/ld-linux.so.2 é fornecido pelo glibc-2.12-1.107.el6_4.4. i686 que não está entre os deps rpm do jdk rpm.

O Oracle JDK rpm também requer versões de 32 bits do libgcc-4.4.7-3.el6. i686 a ser instalado

Portanto, a solução alternativa é instalar primeiro o glibc-2.12-1.107.el6_4.4.i686 e libgcc-4.4.7-3.el6.i686.

scrutari
fonte
Eu tenho o mesmo problema com o Fedora 20 e instale o libgcc-4.8.2-7.fc20.i686 e resolva o problema. Txs
Pipe
0

Solução rápida que funcionou para mim:

for file in $(find "$JAVA_HOME" -name "*pack")
do 
    unpack200 "${file}" "${test_file/%pack/jar}";
done
Liudvikas
fonte
0

Eu descobri que esse erro ocorreu quando extraí o arquivo .rpm.

Em seguida, removi a pasta e baixei o jdk-7u79-linux-x64.tar.gz para o Linux 64 e extraí o conteúdo desse arquivo. Também: exportar JAVA_HOME = / opt / java / jdk1.7.0_79 exportar JDK_HOME = / opt / java / jdk1.7.0_79 exportar PATH = $ {JAVA_HOME} / bin

user5974531
fonte
0

Basta instalar o jre novamente . Simplesmente resolveu meu problema. (O lote de inicialização do SonarQube começou a dar esse erro após a instalação do jdk)

estratovarius
fonte
0

Vá para o painel de controle, desinstale o material relacionado ao java (feche o eclipse se aberto), depois reinstale o java e abra o eclipse, limpe os projetos.

Ateeque Shaikh
fonte
Voto negativo. O OP claramente não está em uma plataforma Windows.
Peterh
0

Acabei de fazer isso no Solaris e me deparei com esse problema idêntico, onde até a versão "java-version" não funciona. Há uma razão para as versões de 64 bits da distribuição serem MUITO menores que as de 32 bits. É realmente como afirmado acima:

Em outras palavras, para obter uma instalação de 64 bits totalmente funcional, você deve primeiro executar a instalação de 32 bits e seguir com uma instalação de 64 bits se tiver uma máquina com capacidade de 64 bits ...

Então, eu executei o instalador para os 32 bits:

sh jdk-6u131-solaris-sparc.sh

Em seguida, executei o instalador para o de 64 bits:

sh jdk-6u131-solaris-sparcv9.sh

Isso me dá vários executáveis ​​java para escolher:

  • $ find. -name java
  • ./jdk1.6.0_131/db/demo/programs/scores/java
  • ./jdk1.6.0_131/db/demo/programs/vtis/java
  • ./jdk1.6.0_131/bin/java
  • ./jdk1.6.0_131/bin/sparcv9/java
  • ./jdk1.6.0_131/jre/bin/java
  • ./jdk1.6.0_131/jre/bin/sparcv9/java

Os sparcv9 java são as versões de 64 bits e funcionam com "-version" quando instalados ao lado do JDK de 32 bits.

  • ./jdk1.6.0_131/bin/sparcv9/java -version
  • versão java "1.6.0_131"
  • Java (TM) SE Runtime Environment (compilação 1.6.0_131-b32)
  • VM do servidor Java HotSpot (TM) de 64 bits (compilação 20.131-b32, modo misto)

-Dan

user7323228
fonte
É verdade, mas a questão é de 2012 e não conhecemos a plataforma do OP. Ele está se referindo a /usr/javaisso, portanto é claramente um Linux / Unix como OS. Você está certo de que a instalação do Java do Solaris era diferente de qualquer outro sistema operacional até o Java8. Você basicamente tive que instalar primeiro o pacote de 32 bits e, em seguida, o pacote de 64 bits em cima dele. Mas isso é tudo no passado agora que 32 bits Java não é mais suportado no Solaris, similar a dizer Mac OS X.
peterh
0

Na janela 10, já existe um caminho presente no env, pois C:\>ProgramData\Oracle\Java\javapathcontém links simbólicos para os executáveis.

Quando instalo uma nova versão e a removo da minha variável de ambiente, todo o meu projeto começa a mostrá-la.

Eu estou usando oxigênio eclipse na janela 10

Para resolvê-lo: -

  1. Acabei de remover o caminho C:\>ProgramData\Oracle\Java\javapathda variável de ambiente e adicionei um novo ambiente como JAVA_HOME e% JAVA_HOME% / bin no caminho

  2. Eu reinstalei o jdk com privilégios de administrador (exclua a pasta JRE anterior)

  3. Abra seu projeto eclipse> clique com o botão direito do mouse> Ir para Propriedades> Em Bibliotecas> Agora remova a Biblioteca do Sistema JRE> Clique em Adicionar Biblioteca> selecione "Biblioteca do Sistema JRE"> Clique em Avançar> Selecione "JRE padrão da área de trabalho (jre1.8.x_xxx)"> terminar

Meu problema foi resolvido :) Espero que ajude você :)

Shubham Jain
fonte
0

Então, continuei tentando de tudo e, finalmente, parece que a reinstalação do java após a desinstalação corrigiu o meu problema.

Plabon Dutta
fonte
0

se houver algum problema para a versão de instalação JAVA

C: \ Onde JAVA

vai dar a localização do java que ele pega. Se você tiver outro caminho que não seja a sua instalação, remova esses arquivos ou renomeie-o (pode ser como _backup). você obterá a versão adequada do arquivo java.

SumataPatil
fonte
-1

Eu enfrentei o mesmo problema, instalei duas versões java, portanto, causou esse problema. para confirmar isso, clique no ícone java no painel de controle, se não abrir, o problema é o mesmo, basta desinstalar uma versão. Pedaco de bolo. obrigado.

srinivasan Elangovan
fonte
-2

Eu estava enfrentando o mesmo problema: Ocorreu um erro durante a inicialização da VM java / lang / NoClassDefFoundError: java / lang / Object

Siga as etapas abaixo para resolver o problema:

Etapa 1. Vá para C: \ Arquivos de Programas \ e procure a pasta Java.

Etapa 2. Exclua a pasta C: \ Arquivos de Programas \ Java.

Etapa 3. Faça o download do novo Jdk para sua versão 32 bits / 64 bits em http://www.oracle.com/technetwork/java/javase/downloads/index.html

Etapa 4. Instale o JDK

Etapa 5: agora defina JAVA_HOME como "C: \ Arquivos de Programas \ Java \ jdk1.8.0_91"

Etapa 6: Abra o prompt de comando e digite java -version.

Funciona.

Mahesh Sutar
fonte
O OP mencionou que JAVA_HOME não era o problema aqui
Alexandre Beaudet
Não há necessidade de configurar JAVA_HOME novamente, se já estiver configurado para o local do jdk. Você pode simplesmente pular a Etapa 5. Basta excluir o JDK mais antigo e instalar um mais novo.
Mahesh Sutar