web-dev-qa-db-ja.com

スレッド 'main'の例外Java.lang.NoClassDefFoundError:

次のプログラムはエラーをスローしています:

public class HelloWorld {
    public static void main(String args[]) {
        System.out.println("Hello World!"); 
    }
}

CLASSPATH C:\Program Files\Java\jdk1.6.0_18\bin\

Path C:\Program Files\Java\jdk1.6.0_18\bin\

JAVAHOME C:\Program Files\Java\jdk1.6.0_18\bin

根本原因を教えてください。

47
Haritha

よくある理由をもう1つ見つけました。 EclipseのようなJavaを使用してパッケージ内にIDEファイルを作成すると、「package pkgName」のようなJavaファイルの上部にパッケージ名が表示されます。 。コマンドプロンプトからこのファイルを実行しようとすると、NoClassDefFoundErrorエラーが発生します。 Javaファイルからパッケージ名を削除し、コマンドプロンプトでコマンドを使用します。このために3時間無駄になりました。 -アブヒ

66
Abhi
Exception in thread "main" Java.lang.NoClassDefFoundError  

Javaが.classファイルを見つけようとする場所の1つが現在のディレクトリです。したがって、.classファイルがC:\Javaにある場合は、現在のディレクトリをそのディレクトリに変更する必要があります。

ディレクトリを変更するには、プロンプトで次のコマンドを入力し、Enterキーを押します。

cd c:\Java  

この.は、クラスパスがローカルディレクトリであることをJavaに伝えます。

Executing your program using this command should correct the problem:
Java -classpath . HelloWorld  
27
sgokhales

パッケージがhelloworldの場合、パッケージの親ディレクトリに移動してから実行します:

Java helloworld.HelloWorld
14
hadibou

次のように実行します。

Java -jar HelloWorld.jar
11

http://scottizu.wordpress.com/2013/08/28/fixing-the-exception-in-thread-main-Java-lang-noclassdeffounderror-in-Eclipse/ を参照してください。

これは、Windowsコマンドプロンプトから実行できるJavaコマンドの長い形式です。

"C:\Program Files\Java\jdk1.6.0_18\bin\javac.exe" -classpath "C:\Users\Scott\workspace\myproject" com\mycompany\myapp\HelloWorld.Java
"C:\Program Files\Java\jdk1.6.0_18\bin\Java.exe" -classpath "C:\Users\Scott\workspace\myproject" com.mycompany.myapp.HelloWorld
  1. これらのコマンドは任意のディレクトリから実行できます。つまり、HelloWorld.Javaファイルがあるディレクトリにいる必要はありません。
  2. 最初の行は、HelloWorld.Javaファイルをコンパイルして、HelloWorld.classファイルを作成します。
  3. 2行目は、HelloWorld.classファイルを実行します。
  4. -classpathは、Javaに、各コマンドで指定されたファイルを探す場所を指示します
  5. Javaコンパイラ(javac.exe)は、クラスパスに対するJavaファイルの場所を想定しています(つまり、ファイルはC:\ Users\Scott\workspace\myproject \にあります) com\mycompany\myapp\HelloWorld.Java)
  6. Java(Java.exe)は、クラスパス(つまり、ファイルはC:\ Users\Scott\workspace\myproject\com\mycompany\myappにあります)に関連するパッケージ(com.mycompany.myapp)およびクラス(HelloWorld)を想定しています\ HelloWorld.class)

クラスパスの最後にスラッシュがないことに注意してください。 javac.exeコマンドは、ファイルが「.Java」で終わることを予期しています。 Java.exeコマンドは完全なクラス名を予期し、「。class」で終了しません。

これらのコマンドを簡素化する方法はいくつかあります。

  1. Java.exeへのパス全体を指定する必要はありません。 JavaをWindowsパスに追加(実行-> sysdm.cpl->詳細タブ->環境変数->パスの選択->編集->追加 "; C:\ Program Files\Java\jdk1.6.0 _18\bin\")。または、Java_HOMEを追加して、その環境変数を作成できます。
  2. クラスパス全体を入力する必要はありません(つまり、-classpath "。"を使用するだけです)。作業するディレクトリを入力します。

    cd "C:\ Users\Scott\workspace\myproject \"

  3. デフォルトパッケージを使用できます(作業ディレクトリにHelloWorld.Javaファイルディレクトリを配置し、Javaパッケージディレクティブを使用しないでください)

これらの変更を行う場合、次のように実行します(-classpath "。"を省略できる場合があります)。

cd "C:\Users\Scott\workspace\myproject\"
javac -classpath "." HelloWorld.Java
java -classpath "." HelloWorld
5
Scott Izu

これが最終的に機能したものです。

`@echo off
set path=%path%;C:\Program Files\Java\jdk1.7.0_71\bin;
set classpath=C:\Program Files\Java\jdk1.7.0_71\lib;
cd <packageDirectoryName>
javac .\trainingPackage\HelloWorld.Java
cd ..
Java trainingPackage.HelloWorld 
REM (Make sure you are on the parent directory of the PackageName and not inside the    Packagedirectory when executing Java).`
4
ravikanth

NoClassDefFounErrorのjavadoc自体が良いスタート( here) であり、プロジェクトをクリーンにして再構築することをお勧めします。

3
talnicolas

私は同じ問題を抱えていて、「Build Main Project F11」で解決策を見つけました。 IDEは「プロジェクト構成」ダイアログの「ビルド」>「コンパイル」部分で「保存時にコンパイル」をオフにする「オプション」を表示しました。 「保存時にコンパイル」のチェックを外してから、通常の(私にとっては)「クリーンとビルド」を行うと、私にとってはうまくいきました。

1
user2676860

フォルダ内のcmdプロンプトに次を入力します。

set classpath=%classpath%;.;
1
Bruevin

Javaファイル:

package com.beans;

public class Flower{
 .......
}

packages :=> com.beans,
Java class Name:=> Flower.Java,
Folder structure (assuming):=> C:\com\beans\Flower.*(both .Java/.class exist here)

次に、それを実行する2つの方法があります。

1. Goto top Folder (here its C:\>),
     then : C:> Java com.beans.Flower 
2. Executing from innermost folder "beans" here (C:\com\beans:>),
     then: C:\com\beans:> Java -cp ./../.. com.beans.Flower
1
Udit Nagi

同じ問題が上記の解決策を試みたが、どれも機能しなかった。 Javaコードを調べて、メイン関数が認識できなかったのは、それと(String)つまり初期コードの間にスペースがなかったためです。

public static void main(String[]args){

作業コード。

public static void main (String[]args){

私が誰かを助けたことを願っています。

1
domii

CLASSPATHは、HelloWorldクラスの場所も知っている必要があります。

簡単に言えば、DOSプロンプトからCLASSPATHおよびjavacコマンドを実行している場合は、Javaにドット.(現在のディレクトリを意味する)を追加する必要があります。

1
anubhava

CLASSPATH変数には、Javaプログラムの.classファイルがあるディレクトリを含める必要があります。 「。」を含めることができますCLASSPATHで、現在のディレクトリを含めることを示します。

set CLASSPATH=%CLASSPATH%;.
1
Amir Afghani

program.Javaが「src/mypkg/subpkg /」ディレクトリにある場合:

「src」ディレクトリに移動します

コンパイルするには、「javac mypkg/subpkg/Program.Java」を使用します

実行するには、「Java mypkg.subpkg.Program.class」を使用します

0
mar915h

やってみて

javac Hello.Java

そして、コンパイラエラーが発生しない場合(プログラムにバグが表示されないため、実行すべきではありません)、次のように入力します

Java Hello

0
DalekCaan99

ここでの問題は、環境の設定とクラスファイルの実行です。 a。環境パスを設定するには、次のコマンドを実行します。set path = C:\ Program Files(x86)\ Java\jdk1.7.0\bin b。 com.test.TestJavaClassのようなパッケージからプログラムを実行します

コマンド:Java com.test.TestJavaClass

ここでの一般的な問題は、src/package/nameなどのパッケージ内から実行することです。 srcは含めないでください。パッケージ名で十分です。

0
Chirag Pahuja

簡単で簡単な解決策:exporting元のプロジェクトをZipファイルに削除元のプロジェクトディレクトリおよびインポート Zipファイルから戻されたプロジェクト。

0
Pavel Vavruska

私はmavenを使用したこの問題を抱えていました。私はmavenプロジェクトantをクリックしてから名前を付けるだけです

project-> plugins -> clean -> and button run

enter image description here

0
Peter Petrov

IDE(Eclipseなど)を使用して作成したJavaファイルを「コンパイルして実行」する場合は、次のコマンドを実行します。

コンパイル:javac Users\dhiraj01\workspace\Practice\src\PracticeLogic\Logics.Java

実行:Java -classpath Users\dhiraj01\workspace\Practice\src\ PracticeLogic.Logics

0
Dhiraj Aggarwal

パッケージ内にファイルがあるため、このエラーが発生しました。したがって、fooパッケージは次のように呼び出す必要がありました。

Java foo.HelloWorld

0
kravits88

さまざまな順列と検索候補を試すのに4時間かかりました。

ついに、この投稿は機能しましたが、テストするために元のコードを変更するのに最適なソリューションではありませんでした。

  1. クラスライブラリset classpath=JDKbin;JDKlib;JREbin;JRElib;myClassLib;.を含めるためにCLASSPATHを変更しようとしました
  2. 現在のディレクトリを親ディレクトリ(パッケージフォルダ)に変更し、疲れたJava <packageName>.<className>Java ..\<packageName>.<className>を試しました

どちらも機能しませんでした。

しかし、最初の応答だけで機能しました。本当にありがとうございました!!!

「もう1つの一般的な理由が見つかりました。EclipseなどのJavaを使用してパッケージ内にIDEファイルを作成すると、Javaファイルの上部にパッケージ名が表示されます。このファイルをコマンドプロンプトから実行しようとすると、NoClassDefFoundErrorエラーが発生します。Javaファイルからパッケージ名を削除し、コマンドプロンプト内のコマンドを使用します。アブヒ」

元のコードを変更せずに動作させる他の方法があるかどうか興味がありますか?ありがとうございました!

0
ravikanth

私はついにこれをApache Netbeansエディターのバグとして見つけました:

以下の手順でエラーを削除します。

  1. ファイル名とクラスの名前をAbcに変更します
  2. エディターを閉じます
  3. エディターを再度開きます
  4. ファイル名とクラスの名前をAbcから以前の名前に戻します
  5. デバッグプロジェクト(Ctrl + F5)が正常に動作するようになりました

新しいApache Netbeans(古いNetbeansではない)を使用している場合は、これが役立つことを願っています