[解決済み】NoClassDefFoundErrorとClassNotFoundExceptionの原因や違いは何ですか?
質問
とはどのような違いがあるのでしょうか?
NoClassDefFoundError
と
ClassNotFoundException
?
何が原因で投げられるのですか?どのように解決するのですか?
新しい jar ファイルを含めるために既存のコードを修正するとき、これらの throwables によく遭遇します。 私は、webstartを通じて配布されたJavaアプリのクライアント側とサーバー側の両方で、このような状況に陥ったことがあります。
私が遭遇した考えられる理由
-
に含まれていないパッケージは
build.xml
クライアント側のコード - 新しい jar を使用するため、ランタイムクラスパスが欠落しています。
- 以前のjarとバージョンが競合している
今日、私はこのような事態に遭遇したとき、物事を動かすためにトレイル・アンド・エラーのアプローチをとっています。もっと明確に理解する必要があります。
解決方法は?
Java API仕様との違いは以下の通りです。
について
ClassNotFoundException
:
アプリケーションが 文字列を通してクラスを読み込む という名前を使っています。
- は
forName
クラス内のメソッドClass
.- は
findSystemClass
クラス内のメソッドClassLoader
.- は
loadClass
クラス内のメソッドClassLoader
.を持つクラスの定義はありません。 指定された名前は見つかりませんでした。
について
NoClassDefFoundError
:
Java仮想マシンまたは a
ClassLoader
インスタンスをロードしようとします。 クラスの定義で 通常のメソッド呼び出し、または を使用して新しいインスタンスを作成します。 式) の定義がなく クラスが見つかりませんでした。検索されたクラス定義 は、現在実行中の クラスがコンパイルされましたが、その定義が が見つからなくなりました。
ということで、どうやら
NoClassDefFoundError
は、ソースのコンパイルが成功したときに発生しますが、実行時には、必要な
class
ファイルが見つかりませんでした。これは、JARファイルの配布や生産で起こりうることで、すべての必要な
class
が含まれています。
については
ClassNotFoundException
この問題は、実行時にクラスへの反射的な呼び出しを行おうとして、プログラムが呼び出そうとしたクラスが存在しないことに起因しているように思われます。
この2つの違いは、一方が
Error
であり、もう一方は
Exception
. とは
NoClassDefFoundError
は
Error
これは、Java仮想マシンが期待したクラスを見つけるのに問題があるために発生します。コンパイル時に動作すると期待されたプログラムは、以下の理由で実行できません。
class
ファイルが見つからないか、コンパイル時に生成または遭遇したものと同じでない場合です。これは、JVMによってプログラムを開始することができないので、かなり重大なエラーです。
一方
ClassNotFoundException
は
Exception
というのは、ある程度予想されることであり、回復可能なことなのです。リフレクションを使うと、エラーが起こりやすくなります(物事が期待通りに進まないことがある程度予想されるからです。必要なクラスがすべて存在することを確認するためのコンパイル時のチェックがないので、必要なクラスを見つけることに関する問題は、実行時に現れます。
関連
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] Javaにおけるシンボリック参照
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] JDKとJREの違いは何ですか?
-
[解決済み] Oracle JDKとOpenJDKの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] tempとは何ですか、またjavaにおけるtempの用途は何ですか?
-
[解決済み] maven. -source 1.5ではラムダ式がサポートされていません。
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] Eclipse デフォルトのフォント名
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] javascriptでExpression言語を使うには?
-
[解決済み] Java- <T extends Comparable<T>>の意味?
-
[解決済み] アニメーションGIFの表示
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました
-
[解決済み] Maven: assembly-pluginが全く実行されない