2

私は単純な Java プロジェクトを持っており、次のように必要なすべてのパスを静的変数に格納する Constants というクラスを持っています。

public static final String PLAYFIELD_SMALL_IMAGE_PATH =  Constants.class.getClassLoader().getResource("Player_Small.png").getPath();

Eclipse にとどまっている限り、問題なく動作します ;)

しかし、プログラムを JAR ファイルにエクスポートして開始すると、例外が発生します。

java.lang.ExceptionInInitializerError

以下を初めて呼び出すと表示されます。

Constants.PLAYFIELD_SMALL_IMAGE_PATH

もう一度開始すると、次のエラーが表示されます。

java.lang.NoClassDefFound: Could not initalize class Constants

私は実際に何を間違っていますか?

編集1:

ここでこれを見つけました:「NoClassDefFoundError:クラスを初期化できませんでした」エラー

まったく同じ問題のようです。では、静的変数を使用すべきではありませんか?

編集2:

静的初期化ブロックを使用すると、ExceptionInInitializerError が即座にスローされます。静的初期化ブロックがなくても、プログラムの最初のメニューにアクセスできました。

編集3:

多分別のヒント!jar を抽出すると、すべてのグラフィックが直接ルート フォルダーにあるため、次のような相対パスを使用しようとしました。

public static final String PLAYFIELD_SMALL_IMAGE_PATH = "Player_Small.png";

しかし、そうすると、グラフィックがロードされません。

4

2 に答える 2

2

最初に jar を解凍し、すべてのクラスがそこにあるかどうかを確認します。

その問題を解決するために多くのことを行うことができます。まず、maven を使用して学習することをお勧めします (最初にMaven を 5 分で確認してください)。ただし、最小限の Java プロジェクトを使い続けたい場合は、次のことを試すことができます。

Thread.currentThread().getContextClassLoader().getResourceAsStream("File1.jpg");

それは役立つはずです

于 2013-08-14T09:14:55.657 に答える