Javaアプリケーションを実行しようとしていますが、このエラーが発生します。
Java.lang.ClassNotFoundException:
コロンの後には、欠けているクラスの場所があります。しかし、クラスは他の場所にあるので、その場所は存在しないことを私は知っています。そのクラスのパスを更新するにはどうすればいいですか。クラスパスと関係がありますか?
あなたのクラスパスは壊れています(これはとてもJavaの世界で一般的な問題です)。
アプリケーションの起動方法によっては、-cp
の引数、MANIFEST.MFのクラスパスエントリ、またはディスクレイアウトを修正する必要があります。
クラスパスはクラスをロードする場所のリストです。
これらの「場所」は、ディレクトリまたはjarファイルのいずれかです。
ディレクトリの場合、JVMはクラスをロードするために予想されるパターンに従います。クラスパスにディレクトリC:/ myproject/classesがあり、クラスをロードしようとしました。com.mycompany.Foo、comという名前のディレクトリをclassesディレクトリの下から探し、次にmycompanyという名前のディレクトリを探し、最後にそれを探します。そのディレクトリで、Foo.classというファイルを探します。
2番目の例では、jarファイルの場合、そのクラスのjarファイルを検索します。 jarファイルは、実際には上記のようなディレクトリのzip圧縮されたコレクションです。 jarファイルを解凍すると、上記のパターンに従ってたくさんのディレクトリとクラスファイルが作成されます。
そのため、JVMはクラス定義をロードしようとするときにクラスパスを最初から最後までトラバースしてクラスの定義を探します。たとえば、クラスパスでは次のようになります。
C:/ myproject/classes; C:/myproject/lib/stuff.jar; C:/myproject/lib/otherstuff.jar
JVMはまずディレクトリのクラス、次にstuff.jar、最後にの順に検索を試みます。 )otherstuff.jar.
ClassNotFoundExceptionが発生した場合は、JVMがクラスパス全体を移動したため、参照しようとしたクラスが見つからなかったことを意味します。解決策は、Javaの世界ではよくあることですが、クラスパスをチェックすることです。
コマンドラインでクラスパスを定義するには、Java -cpに続けてクラスパスを指定します。 EclipseなどのIDEには、クラスパスを指定するためのメニューオプションがあります。
これが 最良の解決策です これまでに見つけたものです。
クラスを含むorg.mypackage
というパッケージがあるとします。
このパッケージを定義するファイルは、物理的にはディレクトリD:\myprogram
(Windowsの場合)または/home/user/myprogram
(Linuxの場合)の下に格納されています。
Javaを起動するときに、実行するアプリケーションの名前をorg.mypackage.HelloWorld
に指定します。ただし、パッケージを定義するファイルとディレクトリを探す場所をJavaに指示する必要もあります。そのため、プログラムを起動するには、次のコマンドを使用する必要があります。
注:現在の場所に関係なく、上記の
Java
コマンドを実行する必要があります。しかし、これはjavac
には当てはまりません。コンパイルするには、.Java
ファイルがあるディレクトリに直接移動して、javac ClassName.Java
を直接実行することもできます。
クラスのパスまたはクラスを含むjarファイルがわかっている場合は、実行中にクラスパスに追加します。ここに記載されているようにクラスパスを使用できます。
windowsの場合
Java -classpath .;yourjar.jar YourMainClass
uNIX/Linuxの場合
Java -classpath .:yourjar.jar YourMainClass
あなたがmavenを使っているならこれらを試してください。私は自分のプロジェクトにmavenを使用し、mvn clean install
を実行してプログラムを実行しようとすると例外がスローされます。それで、私はプロジェクトをきれいにして、そして再びそれを実行します、そして、それは私のために働きます。
私はEclipse IDEを使っています。
Junitテストの実行時にクラスが見つからないという例外が発生した場合は、mvn clean test
を1回実行してみてください。それはすべてのテストクラスをコンパイルします。
JarファイルのフルパスをCLASSPATHに追加します。 Linuxではexport CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH"
を使ってください。他の方法(CLASSPATHを編集せずに)がうまくいったのは、現在のプロジェクトフォルダにあるjarファイルを解凍することでした。
方法は私のために働いていませんでした:
1)jarファイルのフルパスで-cp
オプションを使用します。
2)現在のフォルダーにある場合、jarの名前のみを使用して-cp
を使用する
3)jarを現在のプロジェクトフォルダにコピーする
4)jarをJava jarの標準の場所(/ usr/share/Java)にコピーする
この解決法はmysql-connector-Java.5 - *。jarのクラスcom.mysql.jdbc.Driverに対して報告され、OpenJDKバージョン1.7を使ったLinuxで作業しています
つかいます ';'セパレータとして。環境変数が正しく設定されていれば、設定が表示されます。 PATHとCLASSPATHが正しい場合、ウィンドウはそれらのコマンドを認識します。 Javaをインストールするときにコンピュータを再起動する必要はありません。
コマンドラインでクラスの場所をクラスパスに追加するには、実行中に-cp
または-classpath
とクラスの場所を追加するだけです。 I.E.
Java -cp "c:/location/of/file" YourProgram
あるいはEclipseなどのIDEを実行している場合は、project -> build path -> configure build path
を右クリックしてクラスを含む外部JARをビルドパスに追加すれば問題なく動作します。
私もこれに遭遇し、他の解決策をすべて試しました。 HTMLフォルダに.classファイルがなく、.Javaファイルしかありません。 .classファイルを追加したら、プログラムは正常に動作しました。
クラスパスが正しくない場合に起こる可能性があります。
シリアライズ可能クラスとデシリアライズ可能クラスを同じプロジェクト名で配置しましょう。特定のフォルダに直列化可能オブジェクトを作成して、直列化可能クラスを実行します。これで、非シリアル化データが必要になりました。それまでの間、プロジェクトの名前を変更しても機能しません。最初にシリアライズ可能クラスを実行してからファイルを逆シリアル化する必要があります。
あなたがmavenを使っているなら、すべてのプロジェクトを更新してスナップショットを強制しようと試みてください。それは同様にきれいになり、すべてのクラスパスを再構築します。それは私の問題を解決しました..
先頭に移動してimport文がある場合はそれを削除し、クラスを再度インポートします。しかし、そうでない場合は、クリーンにしてからビルドしてください。あなたはNetbeansまたはEclipseを使用していますか?
今やりました
1.キャッシュを無効にして再起動する
2問題を解決した私のプロジェクトを再構築しました
これは、古いバージョンのJava SDKが欠落していて新しいバージョンが存在するJavaの更新後にWindowsで発生する可能性があります。 IDEがインストールされているJava SDKバージョンを使用しているかどうかを確認します(IntelliJ:Ctrl + Shift + Alt + S)。
私はProcess
クラスを使用してC#コードから.jarを実行しようとしていました。 JavaコードはEclipseから正常に実行されましたが、C#ビジュアルスタジオからではなく、jarファイルを直接クリックすることもしませんでした。常にClassNotFoundException:
例外で停止しました。私のための解決策は、「JARファイル」の代わりに「実行可能なJARファイル」としてJavaプログラムをエクスポートすることでした。誰かに役立つことを願っています。
複数の(サードパーティ)**ライブラリとExtends ** Applicationクラスを追加した場合
それが起こるかもしれません。
そのためには、multiDexEnabled true
を設定し、拡張されたApplication
クラスをMultiDexApplication
に置き換える必要があります。
それは解決されるでしょう。
基本的な一般的な質問 - 最も簡単な一般的な回答;)
情報が与えられれば、私はあなたがコーディング、 "Hello World"のような簡単なコンソールアプリケーションの構築、コンパイル、そして基本的なアプローチを試しているかもしれないという仮定をするでしょう。
このエラーは、次のシナリオで発生します。
..\SomePath>javac HelloWorld.Java
..\SomePath>Java HelloWorld.class
言い換えれば、
..\SomePath>Java HelloWorld
P.Sファイル拡張子.classを追加しても同じ間違いが発生します。また、オペレーティングシステムのEnvironment VariablesのPATHに、Java(JDK/JRE)のbinフォルダがあることを確認してください(詳細については、この記事の他の記事を参照してください)。