[解決済み] java.lang.NoClassDefFoundError」を解決するにはどうすればよいですか?
質問
オラクルの Javaチュートリアル . どちらもコンパイルはうまくいくのですが、実行時にこのエラーが出ます。
Exception in thread "main" java.lang.NoClassDefFoundError: graphics/shapes/Square
at Main.main(Main.java:7)
Caused by: java.lang.ClassNotFoundException: graphics.shapes.Square
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
を持つかもしれませんね。
Main.java
ファイルを間違ったフォルダに保存しています。
以下は、ディレクトリの階層構造です。
graphics
├ Main.java
├ shapes
| ├ Square.java
| ├ Triangle.java
├ linepoint
| ├ Line.java
| ├ Point.java
├ spaceobjects
| ├ Cube.java
| ├ RectPrism.java
そして、こちらは
Main.java
:
import graphics.shapes.*;
import graphics.linepoint.*
import graphics.spaceobjects.*;
public class Main {
public static void main(String args[]) {
Square s = new Square(2, 3, 15);
Line l = new Line(1, 5, 2, 3);
Cube c = new Cube(13, 32, 22);
}
}
何が間違っているのでしょうか?
アップデイト
を配置した後
Main
クラスを
graphics
パッケージ(私は
package graphics;
を追加し、クラスパスを "_test" (グラフィックを含むフォルダ) に設定し、コンパイルし、そして
java graphics.Main
(コマンドラインから)動作しました。
本当に遅いUPDATE #2
を使っていたわけではありません。 エクリプス (ただ メモ帳++(プラス とJDK)、上記の更新で問題が解決しました。しかし、これらの回答の多くはEclipse用であるようですし IntelliJ IDEA しかし、両者は似たようなコンセプトを持っています。
どのように解決するのですか?
コードをコンパイルすると、最終的に
.class
ファイルを作成します。これらのバイナリファイルは、Javaがプログラムを実行するために解釈するバイトコードです。このバイナリファイルは
NoClassDefFoundError
は、クラスローダー(この場合は
java.net.URLClassLoader
を見つけることができません。
.class
ファイルを使用しようとしています。
必要なクラスが存在しなければ、あなたのコードはコンパイルされません (クラスがリフレクションでロードされない限り)。したがって、通常この例外は、クラスパスに必要なクラスが含まれていないことを意味します。クラスローダー(特に
java.net.URLClassLoader
) は、クラスパスの各エントリで a/b/c/ フォルダ内の a.b.c パッケージにあるクラスを探します。
NoClassDefFoundError
は、コンパイルして使おうとしている .jar ファイルの依存関係がないことを示すこともできます。
例えば、クラス
com.example.Foo
で、コンパイルすると、クラスファイル
Foo.class
. 例えば、あなたの作業ディレクトリが
.../project/
. そのクラスファイルは
.../project/com/example
に設定し、クラスパスを
.../project/
.
余談ですが、JavaやJVM言語のために存在する素晴らしいツールを活用することをお勧めします。EclipseやIntelliJ IDEAのような最新のIDEとMavenやGradleのようなビルド管理ツールを使えば、クラスパスについて(それほど)心配する必要がなくなり、コードに集中することができるようになりますよ。とはいえ このリンク では、コマンドラインでの実行時にクラスパスを設定する方法を解説しています。
関連
-
[解決済み】Javaの".class期待値"
-
[解決済み】Doubleはdereferencedできない?
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み】HTTPステータス500 サーブレットクラスのインスタンス化エラー [重複]。
-
[解決済み】ソースルート外のJavaファイル intelliJ
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み】 JAVA 変数宣言はここではできない
-
[解決済み] intellijが自動配線リポジトリにタイプのBeanが見つからないと不正確な発言をする件
-
[解決済み】Javaメソッドスタブ
-
[解決済み】Java Error "Exception in thread "main" java.util.InputMismatchException" Array プログラムで発生。
-
[解決済み】Java LinkedListでNodesを使用する
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない