
netbeansでjava.lang.NoClassDefFoundErrorの解決方法を教えて下さい。
NetBeans IDE 7.0を使ってJAVAで、「Hell World !」を表示するものを
作りました。
ソースコード
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
NetBeansで、
「実行]-「ファイルを実行」とすると、「Hello World!」と表示されます。
正しく動きます。
しかし、
「実行」-「プロジェクトを実行」とすると、以下のエラーメッセージがでます。
java.lang.NoClassDefFoundError: helloworld/HelloWorld
Caused by: java.lang.ClassNotFoundException: helloworld.HelloWorld
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: helloworld.HelloWorld. Program will exit.
Exception in thread "main" Java Result: 1
また、コマンドラインから以下の様に実行しても、実行してもエラーとなります。
C:\Program Files\Java\jdk1.6.0_25\bin>java.exe -jar C:\java\HelloWorld\dist\HelloWorld.jar
Exception in thread "main" java.lang.NoClassDefFoundError: helloworld/HelloWord
Caused by: java.lang.ClassNotFoundException: helloworld.HelloWorld
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: helloworld.HelloWorld. Program will exit.
そこで、
ソースコードに、「package helloworld;」の記述を行いと期待した結果となりました。
NetBeansで、「実行」-「プロジェクトを実行」
コマンドラインから実行
しても、「Hello World!」と表示されます。
ソースコード
package helloworld;
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
何故、
「package helloworld;」の記述の追加で動いたのでしょうか。
あるとないとで、どう違うのでしょうか。
「package helloworld;」は、何を意味しているのでしょうか。
環境は、
JDK1.6(jdk1.6.0_25)
クラスパスは未設定。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
そもそも、Javaではパッケージを命名するのが強く推奨されていると思いますが。
。。。Windowsでいうと、
パッケージがフォルダ、
クラスがファイルにあたります。
質問者様がファイル開いてって、誰かに言われたら
どのフォルダのって聞きますよね?
それと同じで、Javaの実行ファイルにも
どのパッケージのどのクラスを最初に実行するのか教えてあげる必要があります。
さて、質問者様からの状況を見ると、
jarファイルに含まれているマニフェストファイルに、どのパッケージの、どのクラスを実行すべきか書いてありますね。
まずは、DOS窓で、「cd C:\java\HelloWorld\dist\」と入力してから
「jar xvf HelloWorld.jar」と入力してください。
(jarファイルは、圧縮ファイルみたいなものですが、このコマンドで解凍できます。)
そうすると、「META-INF」ってフォルダが出ると思うんですよね。
その中にあるマニフェストファイルをテキストエディタで開くと「helloworld.HelloWorld」って記載されていると思います。
JAVAはこのマニフェストファイルを見て、最初に実行すべきクラスを決めますから、
「helloworld」ってパッケージの
「HelloWorld」ってクラスを実行すればよいと判断している事になります。
元々、「package helloworld;」って宣言が無かったので、
JAVAから見ると、「どれ実行するの???」って感じになっていましたが、
宣言を追加する事で、どのクラスを実行すべきか明確になったという事です。
また、JAVAに最初に実行するクラスはこれだと教えてあげればよいので、
「package helloworld;」の宣言を追加しなくても、
以下の方法で実行する事も可能です。
1.「java -cp HelloWorld.jar HelloWorld」として、最初に実行すべきクラスを命確認する。
2.jar内のマニフェストファイルを書き換える。
ありがとうございます。
詳しく説明して頂きありがとうございます。
私にとってはJavaをやるのが初めてで
分からないことばかりです。
書かれていることが分からないかも知れませんが
勉強していきます。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java jdk17.06のインストーラーが起動しない 1 2023/03/27 21:58
- Java マイクラjavaでForgeを入れたいのですが、インストールした.jarファイルが展開されてしまい中 1 2023/07/28 22:30
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipse実行ができない
-
Googleログインボタンのデザイ...
-
JDONWROADER2のエラー修復
-
Eclipse 動的プロジェクトで404...
-
googleスプレッドシートのGASに...
-
問題作成のWebアプリの作り方を...
-
JAの支部?地域の農協のカード...
-
次のhtml・cssでspan内の文字を...
-
マイクラでPythonのプログラミ...
-
スプレッドシートからリマイン...
-
googleスプレッドシートのスク...
-
Verilogについて質問です。この...
-
論理回路設計をVerilogで行う問...
-
ゲーム開発の入門書を探しています
-
jdbcでinsert,delete,createをe...
-
session,requestはjspで未定義...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
-
is this even a thing?
-
えハミルトン路と全域木のちが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JDONWROADER2のエラー修復
-
Googleログインボタンのデザイ...
-
配列にnullを代入すると、null...
-
jdbcでinsert,delete,createをe...
-
「main メソッドを持つクラスが...
-
プログラミングの問題です。大...
-
eclipseで作ったプログラムを他...
-
正規表現について質問です。 カ...
-
Eclipse 動的プロジェクトで404...
-
マイクラでPythonのプログラミ...
-
jdk17.06のインストーラーが起...
-
自作Androidアプリのデータ引き...
-
直し方について教えて頂きたい...
-
eclipse実行ができない
-
サーブレットをapacheで公開す...
-
あんまりお料理しないのに台所...
-
CSV出力を画面から選択したデー...
-
次のhtml・cssでspan内の文字を...
-
問題作成のWebアプリの作り方を...
-
ゲーム開発の入門書を探しています
おすすめ情報