Javaの初心者です。


クラス名とファイル名を別名にしコンパイル→実行した結果、以下のエラーがでました。
なぜ、エラーがでるのか教えてください。
また。どなたか一行づつ以下のエラー内容を解説ができる方はおられませんか?
ご教授ください。
※エラーの解説は一部でも構いません。

Exception in thread "main" java.lang.NoClassDefFoundError: classHelloWor
Caused by: java.lang.ClassNotFoundException: classHelloWorld
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClassInternal(Unknown Source)
→?
Could not find the main class: classHelloWorld. Program will exit.
→ classHelloworldを見つけることができない?

回答の条件
  • 1人2回まで
  • 登録:2009/09/16 00:13:02
  • 終了:2009/09/23 00:15:02

ベストアンサー

id:decoy2004 No.5

decoy2004回答回数20ベストアンサー獲得回数22009/09/22 10:39:59

ポイント10pt

回答 No.4 の続きです。

1.

ネイティブコードとNative Methodは別物です。

2.

ネイティブコードとはコンピュータが直接実行可能な機械語です。

ネイティブコードはCPU仕様に依存しています。

3.

ネイティブコードを実行する方式は以下の2通りがあります。

《方式 X 》

JavaVMがバイトコードをネイティブコードに変換して実行する。

→Javaのメソッド

《方式 Y 》

コンパイラがC言語で書かれたソースコードからネイティブコードに変換する。

JavaVMがこのネイティブコードを呼び出す。

→Native Method

その他の回答(4件)

id:degucho No.1

degucho回答回数203ベストアンサー獲得回数462009/09/16 00:36:38

ポイント23pt

publicクラスはファイル名とクラス名を同じにしないといけません。

(コンパイラおよびjavaの仕様です。ファイル名のクラスを探しにいって

見つかりませんと言っています)

http://www.javadrive.jp/start/const/index3.html

id:actual No.2

actual回答回数610ベストアンサー獲得回数12009/09/16 07:46:01

ポイント22pt

前の方も書いていますが、ファイル名をクラスの名前解決方法としているJavaの言語仕様です。

id:yusukey No.3

yusukey回答回数73ベストアンサー獲得回数22009/09/16 01:29:29

ポイント23pt

実行するポイントである main メソッドを持つクラスは public でなければなりません。

また、public であるクラスはファイル名とクラス名が一致している必要があります。

classHelloWorld という名前のクラスであれば以下のようになります。

ファイル名: classHelloWorld.java

クラスの定義: public class classHelloWorld {...}

NoClassDefFoundError はクラスが見つからないというエラーです。

実行時にはコンパイル済みのクラスが配置されているディレクトリを java コマンドの -cp または -classpath オプションで指定します。

id:decoy2004 No.4

decoy2004回答回数20ベストアンサー獲得回数22009/09/16 11:39:56

ポイント22pt

●発生原因

以下のようなとき、エラーが発生します。

1. class ファイルが存在しない。

2. 実行するとき、 class ファイルが存在するフォルダを classpath に指定していない。

NoClassDefFoundError (Java Platform SE 6) - http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/NoClassDef...

「Java 仮想マシンまたは ClassLoader インスタンスがクラス定義をロードしようとしたが、クラス定義が見からない場合にスローされます。」

Javaの道>掲示板(実行時のNoClassDefFoundErrorについて) - http://www.javaroad.jp/bbs/answer.jsp?q_id=2005111613514712

●エラー内容

エラーメッセージ1,2行目は

1. エラーが発生した。

2. 発生したスレッドの名前は"main"である。

3. エラーの種類はjava.lang.NoClassDefFoundErrorである。

4. classHelloWorldという名前のクラスが見つからなかった。

エラーメッセージ3行目以降は、エラーがプログラムのどの箇所で発生したかを告げています。

「at java.net.URLClassLoader$1.run」は「java.net.URLClassLoader$1クラスのrunメソッド」、

「(Unknown Source)」は「ソースファイル名を特定できない」、

「(Native Method)」は「Javaのメソッドではなく、ネイティブメソッドである」ことを意味します。

この NoClassDefFoundError の場合、Java VM(Java仮想マシン)の内部で発生したエラーです。

自分が作ったプログラムを動かすことが目的であれば、エラーメッセージ1行目だけ読めば

Java VM起動引数を見直すべきと分かりますので、エラーメッセージ3行目以降は

深入りする必要はないでしょう。

id:masa193

ご回答ありがとうございます。ただ、よくネイティブコードと耳にします。

その存在も仕組みも良くわかりません。すみませんが、ご教授願えないでしょうか?

・native Methodとは具体的になんでしょうか?

→ C言語で記述されたソースなんでしょうか?(VMを通さないで、OS依存による機械語のことでしょうか?)

2009/09/20 01:40:36
id:decoy2004 No.5

decoy2004回答回数20ベストアンサー獲得回数22009/09/22 10:39:59ここでベストアンサー

ポイント10pt

回答 No.4 の続きです。

1.

ネイティブコードとNative Methodは別物です。

2.

ネイティブコードとはコンピュータが直接実行可能な機械語です。

ネイティブコードはCPU仕様に依存しています。

3.

ネイティブコードを実行する方式は以下の2通りがあります。

《方式 X 》

JavaVMがバイトコードをネイティブコードに変換して実行する。

→Javaのメソッド

《方式 Y 》

コンパイラがC言語で書かれたソースコードからネイティブコードに変換する。

JavaVMがこのネイティブコードを呼び出す。

→Native Method

コメントはまだありません

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません