

初めて質問させていただきます。
Javaの実行中にNoClassDefFoundErrorが極稀に発生して困っています。
エラーは以下になります。
Exception in thread "Thread-12" java.lang.NoClassDefFoundError: パッケージ.Sample
at パッケージ.問題発生クラス.run(問題発生クラス.java:71)
1.問題発生クラス.java:71でパッケージ.SampleをNewしています。
2.エラー内容からNewする時にNoClassDefFoundErrorが発生しているようです。
ただし、NoClassDefFoundErrorは数万回に一回でるかでないか。
ネットでも調べましたがコンパイル字のNoClassDefFoundErrorしか見つかりませんでした。
知恵をお貸しいただけないでしょうか
よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
>継承しているクラスがなければ「NoClassDefFoundError」
>が投げられるという理解でよろしかったでしょうか
これは違います、それでも例外は投げられるでしょうが
クラスをロードしようとした時に、必要なクラスが無い
場合に投げられます、継承は関係ありません
以下流れを自分で実行すればわかります
--------------------------------------------------
package test;
public class Hello {
public void say() {
System.out.println("Hello");
}
}
--------------------------------------------------
package test;
public class Test {
public static void main(String args[]) {
Hello h = new Hello();
h.say();
}
}
--------------------------------------------------
これを適当にコンパイルして、実行します
java test.Test
とすれば当然に Hello と出力されますが
test/Hello.class を削除してから実行すれば
java.lang.NoClassDefFoundError を投げます
継承していても、していなくても
ロードするべきクラスがなければ例外です
パスを通してコンパイルしたけど、実行時には
パスが通って無いなど色々です
No.2
- 回答日時:
困った時の「APIドキュメント」。
とりあえずは覗いてみる。java.lang
クラス NoClassDefFoundError
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
案の定、あのいつもの紫色のトーンで何が何だかもう。
ただ、「ClassLoader インスタンス」という言葉を発見。すかさず、googleにて[NoClassDefFoundError ClassLoader Java]でググってみる。
下の方でやっとIBMのサイトを発見。
developerWork > Java technology >
クラス・ローディング問題の神秘を解く 第2回: クラス・ローディングに関する基本的な例外
クラス・ローディングに関する単純な問題と難問を詳しく調べる
http://www-06.ibm.com/jp/developerworks/java/060 …
上記のサイトにて、IBM Hursley Labsの方々が以下のように述べています。
「(前略)クラスAはクラスBを継承しています。そのためクラスAがロードされると、クラス・ローダーは暗黙的にクラスBをロードします。クラスBは存在しないため、NoClassDefFoundErrorが投げられます。」
この回答への補足
choconamacream様
回答ありがとうございます。
http://www-06.ibm.com/jp/developerworks/java/060 …
を読みました。
継承しているクラスがなければ「NoClassDefFoundError」が投げられるという理解でよろしかったでしょうか
上記の理解でよければ毎回エラーが投げられると思います。
No.1
- 回答日時:
ごくまれに・・・っていうのがなぞですよね。
。NoClassDefFoundError は、コンパイル時にはあったけど実行しようとしたら消えた場合にも発生するようです。
http://blog.goo.ne.jp/evergreen_1978/e/a04acf1cc …
一応、googleで[実行中 NoClassDefFoundError]で調べてみました。
複数の人で同じサーバ環境を使ってデバッグをしていて、
たまに他の人が使っているかどうかの確認もせずモジュールを置き換える人がいる
・・・って所ではないでしょうか。
この回答への補足
PED02744様
回答ありがとうございます。
「コンパイル時にはあったけど実行しようとしたら消えた場合」というのは
実行しようとしたらクラスファイルがなかったと言うことでよかったでしょうか?
Javaを実行しているサーバは自分しか使えない環境ですので
他の人が置き換えるというのは起こらないです。
ごくまれにってなんなんでしょうね。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どこからも呼ばれていない無意...
-
java eclipse 型に解決できません
-
EclipseでJSPのコンパイルエラー
-
dllと同じプロジェクトにする方法
-
同一パッケージにあるクラスが...
-
Struts2のアクセスURLについて
-
ATLとMFCの違いは何でしょうか?
-
IPアドレスの3バイト目の呼び方
-
標準モジュールとクラスモジュ...
-
そんなにお金がなくても年に1度...
-
同じクラスにならない確率を教...
-
クラスモジュールの使い方が詳...
-
複数のクラスで共通した関数を...
-
VBAもしくはVB6:クラスの中で...
-
main()を持つクラスが2つ以上...
-
CListCtrlクラスに初期化する関...
-
eclipeでクラス作成ができない
-
配列クラスのクラス名
-
CString: 識別子が見つかりません
-
ActionとActionFormの記述
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
僕の出身中学校は200人同級生が...
-
今日は こどもの日 で、良い天...
-
どこからも呼ばれていない無意...
-
そんなにお金がなくても年に1度...
-
中学生です。 私は教室の黒板に...
-
恋愛
-
EclipseでJSPのコンパイルエラー
-
java eclipse 型に解決できません
-
共通で使う関数を集めたクラス...
-
main()を持つクラスが2つ以上...
-
同一パッケージにあるクラスが...
-
配列の重複する値とその個数を...
-
「隣の芝生は青く見える」現象...
-
重複エラーを解決するには
-
UMLのクラス図はmain()も含むん...
-
複数のクラスで共通した関数を...
-
VBAもしくはVB6:クラスの中で...
-
命名規約は連番でいいのか?
-
eclipse でクラスに色
-
3年間同じクラスになる確率
おすすめ情報