0
public class SomeHelper {
    ...
    private int static x;
    static {
        Map<String, String> aMap = new HashMap<>();
        //populate map here
    }
    public static void setX(int value){
       x = value;
    }
}

SomeHelper.setX が呼び出されると、「クラス SomeHelper を初期化できませんでした」という例外が発生します。これを修正する方法がわかりません。誰でもこの問題に直面しましたか? 例外をキャッチして、静的ブロックからランタイム例外として再スローしようとしましたが、それは役に立ちません。

4

2 に答える 2

1

私はあなたがNoClassDefFoundErrorこのようなものを得ることを意味すると思います:

NoClassDefFoundError: Could not initialize class SomeHelper

JavaSE-7が述べているように:

Java 仮想マシンまたは ClassLoader インスタンスが (通常のメソッド呼び出しの一部として、または new 式を使用した新しいインスタンスの作成の一部として) クラスの定義を読み込もうとしたときに、クラスの定義が見つからなかった場合にスローされる NoClassDefFoundError .

検索対象のクラス定義は、現在実行中のクラスがコンパイルされたときに存在していましたが、その定義が見つからなくなりました。

NoClassDefFoundErrorクラスの静的ビット、つまりクラスの定義中に行われる初期化が失敗した場合に発生することがあります。

だからまず変える

private int static x; 

に、

private static int x;

setX()として宣言するか、呼び出すstaticインスタンスを作成します。SomeHelpersetX()

クラス名で任意のメソッドを呼び出すには、メソッドはstatic.

これを試して:

public static void setX(int value){
   x = value;
}

SomeHelper.setX(someInteger);

またはこれ:

SomeHelper someHelper = new SomeHelper (); // default constructor 
someHelper .setX(someInteger);

クラスにコンストラクターを提供する必要はありませんが、これを行うときは注意が必要です。コンパイラは、コンストラクターを持たないすべてのクラスに対して、引数のない既定のコンストラクターを自動的に提供します。

于 2015-07-14T05:45:49.813 に答える