私はクラスAに以下のメソッドを持っています。すべてのクラスA、B、Cと、 'A'が呼び出されるメインクラスは同じjarファイルにあります。同じjarファイル内で発生するjava.lang.NoClassDefFoundErrorを解決するにはどうすればよいですか?
public class A {
private static void init() {
if (!init) {
synchronized (B.class) {
if (!init) {
map = C.creat();
init = true;
}
}
}
}
}
コードがブロック(ライン4番)でThrowable
、java.lang.NoClassDefFoundError
を投げています。 すべてのクラスが同じjarにあるので、実行時にクラスを見つけられない可能性があります。
私はExisting Questionの解決方法を完了しましたが、解決策が見つかりませんでした。助けてください。私は代わりに「B」のコードの一部を同期するためにstatic object/class A
を使用する場合
は、
問題を固定することができる静的初期化ブロックとクラスBの静的変数があります。私はなぜ例外に直面したのか、それをクラスBのみを使って修正する方法を知りたいのです。
なぜB.classを使用して同期していますか?私はそれがベストプラクティスだとは思わない。 – duffymo
Bの静的ブロックが 'A.init'メソッドを呼び出すことはできますか? – RealSkeptic
jarのパッケージ構造を表示できますか?あなたはjd-guiを逆コンパイルすることができます – Optimus