JRE 1.7-Javaバージョン-戻り値:java / lang / NoClassDefFoundError:java / lang / Object


135

Javaアプリケーション、または単に「java」を実行すると、jvmが失敗します。

VM
java / lang / NoClassDefFoundError:java / lang / Objectの初期化中にエラーが発生しました

ここに間違った答えのリストがあります:

  1. / binディレクトリを含む正しいJavaホームディレクトリがグローバルPATHにある

  2. JAVA_HOMEが正しく設定されている

  3. コマンドjava -fullversionの実行

    $ java -fullversion
    
    ./java full version "1.7.0_05-b05"
    
  4. / usr / java内のシンボリックリンクはすべて、正しいJavaインストールを指します。

  5. システムの作成時に「デフォルト」のJavaをインストールしなかった

  6. java -version 失敗します...上記と同じエラー

  7. Javaインストールのディレクトリ構造の下からコマンドを発行しても機能しない

  8. これは64ビットの64ビットJavaです

何か案は?


2
読み込み時にrt.jar必要なファイルの読み込みに問題があるようですJVMJRE
Bhavik Ambani

おそらくいくつかの許可関連の問題?
Mark Bramnik 2012

truss / straceを実行して、不足しているファイル/ファイルの権限を確認します
Jayan

inbytebg.com/techblog/?p=189、最初のコメントには、インストーラーにパッチを当てるための16進数のトリックがあります
Sebastian

回答:


186

この問題は、不適切なJavaインストールが原因で発生します。

可能性1

注:このシナリオは、Java 8以前にのみ適用されます。Java 9以降、JREの構造は異なります。rt.jarおよびそのフレンドは存在せず、Pack200は使用されなくなりました。

Javaの標準ライブラリは、のような様々なJARファイルに含まれているrt.jardeploy.jarjsse.jarJREがパッケージ化されている場合など、これらの重要なJARファイルは圧縮されてPack200のととして保存されrt.packdeploy.packjsse.packJavaインストーラを解凍彼らになっているなど、。このエラーが発生している場合、明らかにそれは発生していません。

JRE およびフォルダ内のunpack200すべての.packファイルに対して手動で実行する必要がlib/ありlib/ext/ます。

ウィンドウズ

1つの.packファイル(たとえばrt.pack)を解凍するには、次のコマンドを実行します。

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

すべての.packファイルを再帰的に解凍するには、JREルートから次を実行します。

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

* nix

1つの.packファイル(たとえばrt.pack)を解凍するには、次のコマンドを実行します。

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

すべての.packファイルを再帰的に解凍するには、JREルートから次を実行します。

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

可能性2

他の方法でJavaを誤ってインストールした。おそらく、管理者権限なしでインストールしたか、単にインストーラーからファイルを抽出しようとしました。インストーラーおよび/またはより多くの権限で再試行してください。または、インストーラーを使用しない場合は、.tar.gz代わりにJavaパッケージを使用してください。


2
これはSolarisの質問であり、Windowsではありません。
ロビンカンタース2013年

1
このソリューションは、Java Linuxアーカイブファイルをダウンロードするだけで、インストールスクリプトを使用したくない場合に役立ちます。
PotOfTea 2013

23
@Robin Kantersは、この正確な問題/エラーメッセージ、その症状とそれを修正する方法はプラットフォームに依存しないため、これはSolarisではなくJava REの質問です。

1
Javaが自動更新を行った後、Windowsでこの問題が発生することを確認
Lassi Kinnunen

5
私は常に使用しますfor %i in (*.pack) do (..\bin\unpack200 "%i" "%~ni.jar" & del "%i")(たぶん、いつかパスを手動で変更する必要がないように、より堅牢にする.gz予定ですが、通常は、それらをパックしないJRE のリリースを使用します。 )
Synetech

31

* nix OS上のJava 8の場合は、<jdk root>/jre/lib(私にとっては/usr/java/jdk1.8.0_05/jre/lib)にアクセスしてください。このディレクトリから、次を実行します。

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

別のJREがインストールされている場合のバージョンの問題を防ぐにunpack200は、修正するJREに同梱されているものを使用します。つまり、コマンドラインから、だけでなく../../bin/unpack200(これはに展開されます/usr/java/jdk1.8.0_05/bin/unpack200)を使用しますunpack200


3
中:開発には、いくつかの他のパッケージを解凍する必要が"<jdk1.8_root>/lib" ../bin/unpack200 tools.pack tools.jar"<jdk1.8_root>/jre/lib/ext" ../../bin/unpack200 jfxrt.pack jfxrt.jar ../../bin/unpack200 localedata.pack localedata.jar
betontalpfa

いくつかのスクリプトを手動で抽出されたJDKから欠落しているすべてのjarファイルを解凍するためにここに見つけることができます:stackoverflow.com/questions/2203922/...
Kloe2378231

これは私の場合の問題でした。Ubuntu 18.04を使用しています。ありがとうございました!
Boncho Valkov

13

64ビットアーキテクチャの場合は、32ビットバージョンと64ビットバージョンのjreの両方をインストールする必要があるようです(rt.jarとしてのアーキテクチャに依存しないファイルは、32ビットバージョンでのみ配布されます)。

正しいJava実行可能ファイルをグローバルPATH環境変数に含めるように注意してください。


3
どこで手に入れたのarchitecture independent files as rt.jar are distributed only in the 32-bin version
Aleksandr M

ディストリビューションの内容を調べたところです
Tommaso

+1はい、あなたは正しいです。rt.jarは、solaris 64ビットのjreパッケージには含まれていません。
Aleksandr M

3
これに追加するには-SmartOSで手動インストールを実行しているときにこれに遭遇しました。blogs.oracle.com/thefield/entry/solaris_11_jdk_installation(ほとんどの場合)にある手順に従ってください。
Khushil 2013年

jdk-7u79-solaris-sparcv9.tar.Zとjdk-7u79-solaris-sparc.tar.Zの両方のパッケージをインストールしました。現在は正常に機能しているようです。タイ。
Alex Pi 2016

11

せっかちな人のためのクイックソリューション ;)Windowsマシンでこれを試してください:C:\Windows\System32ディレクトリに移動して削除しますjava.exe(またはのような名前に変更しますjava.exe.old)。

少なくとも1.6以降java.exe、Windowsディレクトリにがあってはなりません。ある場合、それは何かの残り物です。

もう少し読んでください:

2012年の質問には承認された回答がまだないことに本当に驚いています。実際、Win 7 32ビットOSで2015年に同じ問題が発生しました。

それで、何が起こりましたか?

基本的に、すべてが正常に機能していたので、H2データベースをダウンロードし、起動しようとすると次のようH2 Console (Command Line)になりました。

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

私はこの質問を見つけ、同じ症状を確認することができました:

JAVA_HOMEが正しく設定されている:

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

java -version失敗しますが、java --fullversion正常に動作します:

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

解決策:C:\Windows\System32ディレクトリに 移動し、(実際に名前を変更した)java.exeファイルを削除します!!!!

今、私は得ます:

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)

そしてH2 Console (Command Line)、うまくいきます!

クレジットは、このフォーラムの最後の投稿に移動しますhttps : //bukkit.org/threads/java-lang-noclassdeffounderror-java-lang-object.70450/


私もこの問題に直面していますが、あなたの場合、単に古いバージョンのJavaを使用しているようです。1.6.0_26!= 1.6.0_45、古いバージョンにはおそらく問題がありません。
Centimane

よくわかりました!JDK 1.6.0_26がインストールされていて、その「新しい」バージョンはWindows System32フォルダーからのものです。どちらもPATH環境変数にあり、実際にはWindows提供のJavaランタイムを使用したくありません。したがって、それを削除すると問題が解決しました。多分あなたもあなたのPATHに2つのJavaランタイムがありますか?
iaforek

私にとって、インストールにはrt.jar(java.lang.Objectがある場所)がありませんでした。残念ながら、キックスタートからRPMをインストールすると、rt.jarがありませんが、そこにインストールした後でインストールすると、面白い問題が発生します。
Centimane 2015年

RPMのサポートはできません。申し訳ありません。
iaforek

4
私にとってjavaのシンボリックリンクC:\ProgramData\Oracle\Java\javapathが問題の原因でした。PATH環境変数を変更すると、正常に機能します。
WhiteKnight 2016年

10

私は今日新しいJDK(1.8.0.73)をダウンロードし始めc:> java.exe、悪評を得ました:

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

私はここで私の解決策を共有したかっただけです。

jdk\binフォルダにcd'iedすると、Javaは問題なく動作するため、それがであることがわかりましたPATH。私はそれを証明するためPATHにちょうど\jdk\binCMD に設定し、それが機能した。

だから、PATHマストにあるフォルダの1つがjava.exe競合の原因だったと思った。それが判明したように、それはでしたC:\>ProgramData\Oracle\Java\javapath保持するシンボリックリンクを実行可能に。

java.exeを指していたjre\bin。私が始めたとき、ファイルは壊れていました\jre\bin\java.exe-まったく同じエラーです。ビンゴ。JREを再インストールしたところ、問題は解消しました。ハッピーコーディング...


8

ほとんどの場合、java.lang.Objectのクラスファイルを含むrt.jarというファイルがインストールにありません。インストールファイルなどを確認してください。

特に、64ビットのインストールでは、既存の32ビットのインストールがオーバーレイ(または「次」にインストール)されることに注意してください。つまり、完全に機能する64ビットインストールを取得するには、まず32ビットインストールを実行し、64ビット対応マシンがある場合は64ビットインストールを実行する必要があります...

代わりに64ビットインストールだけを実行すると、インストールに特定のファイルが欠落し、上記のようなエラーが発生します。


それは答えの一部です。Java SDKパスの/ libおよびlib / extディレクトリ内のすべての* .packファイルを解凍する必要があります。unpack200はこれを支援します。Rigg802のコメントをご覧ください。
danger89

7

Windows 10では、JRE 1.8(8u121)で同じ問題に直面していました。
タイピング

java -version

cmdプロンプトに戻ります

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

他のすべてのコマンドは、echo %JAVA_HOME%echo %JRE_HOME%echo %PATH%java -fullversion罰金を働きました。

システム管理パネルの環境変数に移動しC:\ProgramData\Oracle\Java\javapath、PATHからリンクを削除し、PATHにリンクを設定していることを確認してくださいC:\Program Files\Java Folder\bin

その後C:\Windows\System32java.exeファイルが存在するかどうかを確認します。trueの場合、そのファイルを削除します。

タイピングはjava -version正常に動作します。


2
Windowsの更新後も同じ問題がありますが、フォルダがありませんC:\Program Files\Java Folder\bin。代わりに使用しますC:\Program Files\Java\jdk1.8.0_161\binが、とにかくそれは私を助けません。フォルダーSystem32にファイルjava.exeがありません
Tom

6

この問題は、JDKを_uncompressing_代わりにインストールすると発生します_executing_

例として:

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

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

最初のシナリオでは、ランタイムライブラリはrt.jarとして自動的に圧縮解除されません(したがって、.jarファイルの代わりにrt.packファイルなどを見つけることができます)。


4

最近同じ問題がありました。私の場合、私のWindows 7マシンは自動的にJavaをダウンロードしC:\ProgramData\Oracle\Java\javapath、パス環境変数の先頭に追加されました。パスからそれを取り除くと、うまくいきました。


3

Javaバイナリで「chmod u + rx」を実行して実行すると、jarファイルが解凍され、ランタイムエラーなしでjava -versionを実行できます。


3

64ビットだけをインストールすることはできません。最初に32ビットをインストールしてから、64ビットコンポーネントを追加する必要があります。

java.comから:

32ビットJVMを許可する64ビットシステムにJREをインストールするプロセスは、2段階のプロセスです。最初に32ビットJREをインストールしてから、64ビット操作の追加サポートをインストールします。ファイル名は次のとおりです。


OPは64ビットシステムで32ビットJVMを実行することについて何も述べていません...?
wookie919 14

1

最初に32ビットをインストールせずに64ビットバージョンをインストールすると、他のすべての問題が修正されているにもかかわらず、このエラーが発生します。Java 8u71を実行している真新しいDell i7 64ビットWindows 10 Proマシンがあります。%path%と%classpath%を環境変数に追加し、他のいくつかの修正を試みた後、64ビットをアンインストールし、32ビットをインストールしてから、64ビットを再インストールすると修正されました。

考えられる原因として挙げられているファイルを解凍しないなどの問題のいくつかは、依然として問題を引き起こしている可能性がありますが、これを行わないと、他の修正は機能しません。


1

私の場合、Windows 8.1(jdk1.8.0_77がインストールされている)を使用しています。

  1. 以前のjdksを削除しました
  2. C:\ Windows \ System32内のjava.exeファイルの名前を変更しました
  3. また、PATHからC:\ ProgramData \ Oracle \ Java \ javapathを削除しました(エコー%PATH%)

そして出来上がりが修正されました!



0

Linuxの場合は、代わりにtar.gzファイルを使用することもできます。ソラリスのプラットフォームについても、そのようなものがあるようです。このようにして、すべてのファイルはすでに予期した形式になり、解凍の問題は発生しません。


代わりにtar.gzファイルを使用するとはどういう意味ですか?
Koray Tugay

約2.5年前にこれに答えたことを考えると、Javaダウンロードサイトをもう一度確認する必要がありました。そこでは、LinuXの.rpmのようにパッケージ化された方法でjavaをダウンロードするという選択肢があります。以前に試してみて、困ったと思います。代わりにtar.gzファイルをダウンロードすると、すべてのコンテンツが目的のファイル形式で含まれていたため、うまく機能しました。
リズミック

0

JDK 1.7.0_40 i586を使用するx86_64 Linuxインストールでいくつかの問題があります。Rigg802で言及されているように、rpmがjarファイルを解凍できないことが問題であることがわかりました(rpmは成功のマーク付けを完了します)。

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

ファイル/lib/ld-linux.so.2は、glibc-2.12-1.107.el6_4.4によって提供されます。jdk rpmのrpm depsに含まれていないi686

Oracle JDK rpmには、32ビットバージョンのlibgcc-4.4.7-3.el6も必要です。インストールするi686

したがって、回避策は、まずglibc-2.12-1.107.el6_4.4.i686とlibgcc-4.4.7-3.el6.i686をインストールすることです。


Fedora 20でも同じ問題が発生し、libgcc-4.8.2-7.fc20.i686をインストールすると問題が解決します。TXS
パイプ

0

私のために働いたクイックフィックス:

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

0

このエラーは、.rpmファイルを抽出したときに発生したことがわかりました。

次に、そのフォルダーを削除し、Linux 64用のjdk-7u79-linux-x64.tar.gzをダウンロードして、代わりにこのファイルの内容を抽出しました。また:export JAVA_HOME = / opt / java / jdk1.7.0_79 export JDK_HOME = / opt / java / jdk1.7.0_79 export PATH = $ {JAVA_HOME} / bin


0

もう一度 jreをインストールしてください。それは単に私の問題を解決しました。(jnarをインストールした後、SonarQube起動バッチがこのエラーを出し始めました)


0

コントロールパネルに移動し、Java関連のものをアンインストールし(開いている場合はEclipseを閉じます)、Javaを再インストールしてEclipseを開き、プロジェクトをクリーンアップします。


反対票。OPは明らかにWindowsプラットフォーム上にありません
peterh 16

0

Solarisでこれを実行しただけで、 "java -version"でも機能しないという同じ問題が発生しました。ディストリビューションの64ビット版が32ビット版よりもずっと小さいのには理由があります。それは確かに上記のとおりです:

つまり、完全に機能する64ビットインストールを取得するには、まず32ビットインストールを実行し、64ビット対応マシンがある場合は64ビットインストールを実行する必要があります...

したがって、32ビットのインストーラーを実行しました。

sh jdk-6u131-solaris-sparc.sh

次に、64ビットのインストーラーを実行しました。

sh jdk-6u131-solaris-sparcv9.sh

これにより、いくつかのJava実行可能ファイルから選択できます。

  • $見つける。-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

sparcv9 Javaは64ビットバージョンであり、32ビットJDKと一緒にインストールすると「-version」で動作します。

  • ./jdk1.6.0_131/bin/sparcv9/java -version
  • Javaバージョン「1.6.0_131」
  • Java(TM)SEランタイム環境(ビルド1.6.0_131-b32)
  • Java HotSpot(TM)64ビットサーバーVM(ビルド20.131-b32、混合モード)

-ダン


本当ですが、問題は2012年からであり、OPのプラットフォームがわかりません。彼/usr/javaはそう言及しているので、明らかにそれはOSのようなLinux / Unixです。JavaのSolarisインストールは、Java8までは他のどのOSとも異なっていました。あなたは、基本的には、第1の32ビットパッケージ、その後、64ビットのパッケージをインストールする必要がありました上で、それの。しかし、それは今、32ビットJavaはもはやマックOS Xを言うのに似てのSolaris上でサポートされていること、過去にすべてです
peterh

0

ウィンドウ10ではC:\>ProgramData\Oracle\Java\javapath、実行可能ファイルへのシンボリックリンクを保持するパスがenvにすでに存在しています。

新しいバージョンをインストールしてそれを環境変数から削除すると、私のすべてのプロジェクトがそれを表示し始めます。

ウィンドウ10で日食酸素を使用しています

それを解決するには:-

  1. C:\>ProgramData\Oracle\Java\javapath環境変数からパスを削除し、パスにJAVA_HOMEおよび%JAVA_HOME%/ binとして新しい環境を追加するだけです

  2. 管理者権限でjdkを再インストールします(以前のJREフォルダーを削除します)

  3. Eclipseプロジェクトを開く>右クリック>プロパティに移動>ライブラリ内> JREシステムライブラリを削除>ライブラリの追加をクリック>「JREシステムライブラリ」を選択>次をクリック>「ワークスペースデフォルトJRE(jre1.8.x_xxx)」を選択>仕上げ

私の問題は解決しました:)それがあなたに役立つことを願っています:)



0

だから、私はすべてを試し続け、ついにそれをアンインストールした後にjavaを再インストールすると問題が解決したようです。


0

JAVAインストールバージョンに問題がある場合

C:\ Where JAVA

それが拾うJavaの場所を与えるでしょう。インストール以外のパスがある場合は、それらのファイルを削除するか、ファイル名を変更します(_backupの場合もあります)。あなたはJavaファイルの適切なバージョンを取得します。


-1

同じ問題に直面し、2つのJavaバージョンをインストールしたため、この問題が発生しました。これを確認するには、コントロールパネルのjavaアイコンをクリックして開かない場合は問題が発生しないので、1つのバージョンをアンインストールしてください。ケーキ。ありがとう。


-2

同じ問題が発生していました:VM java / lang / NoClassDefFoundError:java / lang / Objectの初期化中にエラーが発生しました

以下の手順に従って問題を解決します。

手順1. C:\ Program Files \に移動し、Javaフォルダーを検索します。

手順2. C:\ Program Files \ Javaフォルダを削除します。

ステップ3. http://www.oracle.com/technetwork/java/javase/downloads/index.htmlからバージョン32ビット/ 64ビットの新しいJdkをダウンロードする

ステップ4. JDKをインストールする

ステップ5:JAVA_HOMEを「C:\ Program Files \ Java \ jdk1.8.0_91」に設定します

手順6:コマンドプロンプトを開き、java -versionと入力します。

できます。


OPは、JAVA_HOMEはここでは問題ではなかったと述べました
Alexandre Beaudet

すでにjdkの場所に設定されている場合は、JAVA_HOMEを再度設定する必要はありません。ステップ5は省略できます。古いJDKを削除して、新しいJDKをインストールするだけです。
Mahesh Sutar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.