Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(Exception in thread "main" java.lang.NoSuchMethodError: main)
閲覧数:26248
掲示板(Exception in thread "main" java.lang.NoSuchMethodError: main)
名前
題名 Exception in thread "main" java.lang.NoSuchMethodError: main
質問内容

質問を評価する
(0ポイント)
Exception in thread "main" java.lang.NoSuchMethodError: mainのエラーが出るのは
public static void main(String[] args)
もしくは
public static void main(String args[])
のコード文が抜けている場合だと分かっているのですが、
public class HelloWorld
{
    public static void main(String[] args)
    {
        System.out.println("Hello Java World !");
    }
}
上記のように
public static void main(String[] args)のコードがあったとしても、コンパイルをし、実行すると、
Exception in thread "main" java.lang.NoSuchMethodError: main
のエラーが起きるのはどうしてでしょうか?
どなたか教えてもらえないでしょうか?
質問日時 2007-03-13 19:03:03
名前
回答内容

回答を評価する
(0ポイント)
>コード文が抜けている場合だと分かっているのですが、

違います。

「JVMがmainの書かれているクラスを見つけることができない」というエラーです。

クラスパスの設定を確認しましょう。
回答日時 2007-03-13 19:21:06
名前
回答内容

回答を評価する
(0ポイント)
とおりすがりさん、お答えいただき有難うございます。
>クラスパスの設定を確認しましょう。

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
といったエラーが出た場合に確認するのではないのでしょうか?
今回のエラーと関係あるのですか?
回答日時 2007-03-13 19:41:45
名前
回答内容

回答を評価する
(0ポイント)
どういうふうに起動されてますか?
java -cp . HelloWorld
と、カレントディレクトリにクラスパスを通しても駄目ですか?
回答日時 2007-03-14 01:46:49
名前
回答内容

回答を評価する
(0ポイント)
NoClassDefFoundErrorじゃなかったですね。細かく見てませんでした。すいません。

「指定したクラスにmainというメソッドが存在しません」というエラーですね。実際にソースには「main」メソッドを正しく書いているようなので、後はHelloWorld.classというファイルが他にあるとかが原因ではないでしょうか。

「NoClassDefFoundError」「NoSuchMethodException」が発生したら
http://www.atmarkit.co.jp/fjava/rensai3/code_debug06/debug06.html

上記ページに「どのように発生するか」などは書いているので参照してみては?
回答日時 2007-03-14 09:16:59
名前
回答内容

回答を評価する
(0ポイント)
Mineさん、とおりすがりさん返信有難うございます。
>java -cp . HelloWorld
と、カレントディレクトリにクラスパスを通しても駄目ですか?
エラーが起きる状態で、クラスパスを設定した所、エラーが発生しました。

>「NoClassDefFoundError」「NoSuchMethodException」が発生したら
http://www.atmarkit.co.jp/fjava/rensai3/code_debug06/debug06.html

上記のページのエラーが起きる箇所を読んでみたのですが、エラーが起きる原因になる様な事はしてませんでした。

それで、自分なりに原因を探した所、1つだけ原因みたいな物を見つけました。

HelloWorld.javaをコンパイルした後に、違うディレクトリからclassファイルをHelloWolrd.javaとHelloWorld.classがあるディレクトリにコピーした場合に実行が通らなくなりました。何度か他のファイルでも試した所、通りませんでした。
これが原因の様な気がしますけど、何故コンパイルをせずにコピーをしたclassファイルが存在すると実行が通らなくなるかはまだ分かっておりません。
どなたか知っておりましたら、教えてください。
回答日時 2007-03-14 11:10:56
名前
回答内容

回答を評価する
(0ポイント)
上記の追記です。
違うディレクトリからclassファイルをコピーした場合だけだと、実行はまだ通ります。
コピーした後に、もう一度HelloWolrd.javaをコンパイルをして、実行をしたら通らなくなりました。
回答日時 2007-03-14 11:22:56
名前
mio
回答内容

回答を評価する
(0ポイント)
クラスパスの関係で、別のところにあるHelloWorldを先に読みに行って、「mainがない」と言っているのでは。
回答日時 2007-03-15 10:14:33
名前
回答内容

回答を評価する
(0ポイント)
mioさん、返信有難うございます。
>クラスパスの関係で、別のところにあるHelloWorldを先に読みに行って、「mainがない」と言っているのでは。

上記はHelloWorld.classファイルが、同じまたは別のディレクトリに存在するという事でしょうか?

HelloWorld.classは他のディレクトリには存在せず、クラスパスもHelloWorld.classが存在するディレクトリに指定しております。
回答日時 2007-03-15 11:13:15
名前
mio
回答内容

回答を評価する
(0ポイント)
ふつう、他のクラスをコピーした程度ではそんなことにはなりません。
上書きしているのなら別ですが。
タイムスタンプを確認して、本当にコンパイルしたときのものか、見てみてください。

もし変化がないのであれば、最悪ディスクが壊れていることも考えられます。
回答日時 2007-03-15 12:38:28
名前
回答内容

回答を評価する
(30ポイント)
解釈としては、main()の記述が間違ってると考えればいいのですか?
回答日時 2007-09-21 21:19:57
名前
回答内容

回答を評価する
(0ポイント)
ふとおもった。
環境変数の設定がおかしい。

java -classpath . 実行クラス名
という起動方法でどうです?
回答日時 2007-09-22 22:40:51
名前
回答内容

回答を評価する
(0ポイント)
もしかして
java 実行ファイル.class
って感じで.classを付けて実行してない?

java 実行ファイル(拡張子なし)
じゃないと他のCLASSPATHへmainを探しに行くと
思うんだけど
回答日時 2007-11-29 00:25:39
名前
 
回答内容

回答を評価する
(0ポイント)
最初のエラーメッセージは
「main クラスに main メソッドが無い」
って言ってるように見えますけど?
回答日時 2007-11-29 09:39:43
名前
 
回答内容

回答を評価する
(0ポイント)
ごめんなさい。
間違えました。
2007-11-29 09:39は嘘です。
回答日時 2007-11-29 11:35:11
名前
回答内容

回答を評価する
(0ポイント)
同じエラーが出ましたが
環境変数にCLASSPATHの変数名で.classのファイルが保存されたフォルダを指定すると実行できました。
回答日時 2008-03-20 14:32:59

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道