- ベストアンサー
ファイル実行時エラーがでる・・・(^^;)。
JAVA超初心者です。初級者向けの本を見て、プログラムの勉強を始めてみました。コンパイルをするためのパスの設定はうまくいきました。Cドライブ直下に「java」フォルダを作りそこにファイル名「Hello.java」として保存しました。そのクラスファイル「Hello.java」をコマンドプロンプト上でC:\java>に続き「java Hello」と入力して、実行しようとすると、下記のエラーが出て困っています。Exception in thread "main"java.lang.NoClassDefFoundError:Hello です。解説本を見ると、環境変数の「CLASSPATH」の設定に関して問題があるようで、カレントディレクトリをあらわす「.」を追加すればいいというのですが、私にとって「.」って何?どこにどうつけるのか具体的手順がよく説明されておらず、意味不明です。 使用OSはWinXPなのですが、何をどうすればエラーに対処できるのか、プログラムが問題なく、実行できるのか、知りたいのです。ちなみに「JDK5.0(jdk-1_5_0-windows-i586)」を使用しております。保存場所は、「c:\Program Files\Java\」内です。どうかよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
●考えられる原因その1 コンパイルも成功してクラスファイルもできている。ならば、そのエラーはおかしいですね。もう一度、「java Hello」とタイプしてください。で、「Exception in thread "main"java.lang.NoClassDefFoundError:Hello 」がでるようなら、「java -cp . Hello」とタイプしてください。 落ち着いて一文字の間違いもなく(大文字・小文字間違えなく)やってください。原因は単なるイージーミスとしか考えられません。 ●考えられる原因その2 mainメソッドの記述がおかしいと上記のエラーがでます。メインメソッドの定義で「public static void main(String args[])」と定義していますか?僕のサンプルソースを載せますので、コンパイル・実行してみてください。その後あなたのソースコードと違いをみてください。特に、staticキーワードが抜けていたりするときがあります。staticについては、後々勉強してみましょう。ソースコードは以下です。 public class Hello3 { public static void main(String args[]) { System.out.println("Hello World!!"); } } コピー&ペーストしてください。Hello3.javaと言うファイル名にして、「javac Hello3.java」→「java -cp . Hello3」とコマンドプロンプトで入力してください。 可能性としては●2番目の方が高いとおもいます。 また、参考URLは2chの有志の人たちが作ってくれたサイトですが、大変参考になります(特に初心者の方)。エラーが出たら一度見てみるのもいいとおもいます。2chでも親切な人は親切ですから・・・ では、がんばってください。上記の2点さえしっかり守れば、”必ず”できると思います。
その他の回答 (3)
- kamkamkam3
- ベストアンサー率42% (216/514)
そこまで自力で設定できたのは大変立派です。残りは簡単ですので頑張りましょう。 まず3行目>「Hello.java」として保存しました。そのクラスファイル「Hello.java」 ●Hello.javaはソースファイルです。実行可能にするためにコンパイルしなくてはなりません。コンパイルコマンドは「javac」です。「C:\Java>javac Hello.java」と入力してみましょう。そうすると「Hello.class」という実行可能ファイルができあがります。で実行コマンド「java」をつかいます。 >「.」って何 ●プログラムを進めていくとわかりますが、現在ディレクトリです。あなたでいえばC:\Javaですね。コマンドプロンプトの「>」の左側がカレントディレクトリ(作業ディレクトリ、現在ディレクトリとも言います) で、>Exception in thread "main"java.lang.NoClassDefFoundError:Hello ●クラスパスの指定が必要です。「C:\>java -cp . Hello」としてください。「java」はさっき書いたとおりコンパイルしてできたclassファイルを実行してくれます。-cpはクラスバスを指定するオプションです。ちなみに「java -classpath . Hello」としてもいいです。ちなみに「java -cp . Hello.class」とかしないでくださいね。 ●クラスパスを指定する際、「-cp C:\java」とするより、「-cp . 」とした方が簡単ですよね。本来の意味とは違いますが、そう覚えておいても差し支えありません。 ーーーーー↓以下余談ですーーーーーーーーー 「.」は、Windowsの前身のDOSの作成者ビルゲイツがUnixの現在ディレクトリ表示をパクッタものでUnixでは現在ディレクトリを「.」一つ上のディレクトリを「..」で表すという風になっているのです。一種の決まりごとですね。 では、頑張ってください。また、エラーがでるようなら貼り付けておいてください。コピペでいいです。
補足
詳しい回答をたいへんありがとうございました。コンパイルは成功し、実行可能ファイルは作成できました。「C:\>java -cp . Hello(→C:\java> -cp . Hello)」を使ってやってみたのですが、「内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」と再度エラーが出てしまいました。「.」って、そんな奥深い(?)意味があったのですね。勉強になりました。「..」も同様。エラーには動揺・・・。すいません。もし、補足して頂けましたらよろしくお願いいたします。
- Chronos198
- ベストアンサー率30% (105/349)
まぁぶっちゃけその辺も併せて勉強してください。 とりあえずの解決方法として、 java -cp . Hello という形で実行してみてください。きっと動いてくれます。 この -cp についても詳しい事は勉強して身に付けてください。 それと、同じ質問がすでにアホのように沢山されています。 質問するまえに検索しましょう。
補足
回答ありがとうございます。「-cp」を使ってやってみたのですが、「内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」と表示されてしまいます。過去ログ検索もしてみます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
まず、 javac Hello.java として クラスファイル Hello.class を作成します。 Hello.class があることを確認してから java Hello と実行してみて下さい。
補足
回答ありがとうございます。コンパイルはできておりましてクラスファイルは作成されています。その後のjavaコマンドで「実行」しようとすると、エラーがでてしますのです(悲)。
補足
回答を何度もありがとうございます。参考URLも2chなのによいサイトだと思いました。kamkamkam3さんの指示通りにやってみましたところ、一度はまた、 Unrecognized option: -cp.Hello3 Could not create the Java virtual mashine. なるエラーが出たのですが、その後過去ログを調べたところ、実に単純な間違いですが、「java -cp . Hello」の「.」の左右に[スペース]を入れるのをおこたっていました。ほんとにこんなことにも気づけなくて申し訳ありません。私は何かシステム環境変数の設定が依然としておかしいのではないかと思っていましたが、そうではありませんでした。感謝です!