2012-02-12 8 views
0

jarファイルの実行に問題があります。 Eclipseでコードをコンパイルしても問題ありませんが、jarファイルにエクスポートしてプログラムを実行しようとすると、エラーがスローされます。 エラーは次のとおりです。jarファイルのイメージリソースでエラーが発生しました

Exception in thread "main" java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(Unknown Source) 
    at game.ChessSquare.<init>(ChessSquare.java:17) 
    at game.ChessFrame.DrawField(ChessFrame.java:131) 
    at game.ChessFrame.<init>(ChessFrame.java:38) 
    at game.Chess.main(Chess.java:7) 

私は理解して、このエラーがスローされますコードの一部が

//text is something like "pawn" or "king".The whole image is an icon on the button 
img = new ImageIcon(getClass().getResource("white/"+text+".png")); 

ある変数がnullであるIMGので、それが画像を見つけることができません。しかし、なぜそれが日食で動作するのか理解できません。これに関する助け?おかげ

PS @AndrewThompson

E:\Desktop>jar tvf chess.jar 
49 Sat Feb 11 23:40:06 GMT 2012 META-INF/MANIFEST.MF 
378 Sat Feb 11 22:51:04 GMT 2012 game/ChessFieldCoord.class 
1932 Sat Feb 11 23:39:48 GMT 2012 game/ChessSquare.class 
536 Sat Feb 11 22:51:04 GMT 2012 game/Chess.class 
2122 Sat Feb 11 22:51:04 GMT 2012 game/Rook.class 
2357 Sat Feb 11 22:51:04 GMT 2012 game/Bishop.class 
1946 Sat Feb 11 22:51:04 GMT 2012 game/Queen.class 
2127 Sat Feb 11 22:51:04 GMT 2012 game/Pawn.class 
1630 Sat Feb 11 22:51:04 GMT 2012 game/Knight.class 
878 Sat Feb 11 22:51:04 GMT 2012 game/Empty.class 
1642 Sat Feb 11 22:51:04 GMT 2012 game/King.class 
915 Sat Feb 11 22:52:32 GMT 2012 game/ChessFrame$1.class 
841 Sat Feb 11 22:52:32 GMT 2012 game/ChessFrame$2.class 
695 Sat Feb 11 22:52:32 GMT 2012 game/ChessFrame$3.class 
3525 Sat Feb 11 22:52:32 GMT 2012 game/ChessFrame$Move.class 
4675 Sat Feb 11 22:52:32 GMT 2012 game/ChessFrame.class 
997 Sat Feb 11 22:51:04 GMT 2012 game/ChessFigure.class 
928 Sat Feb 11 15:49:32 GMT 2012 game/black/bishop.png 
1947 Sat Feb 11 15:49:10 GMT 2012 game/black/king.png 
1247 Sat Feb 11 15:49:38 GMT 2012 game/black/knight.png 
627 Sat Feb 11 15:49:44 GMT 2012 game/black/pawn.png 
1668 Sat Feb 11 15:49:20 GMT 2012 game/black/queen.png 
626 Sat Feb 11 15:49:26 GMT 2012 game/black/rook.png 
1493 Sat Feb 11 15:48:30 GMT 2012 game/white/bishop.png 
1889 Sat Feb 11 15:48:06 GMT 2012 game/white/king.png 
1544 Sat Feb 11 15:48:40 GMT 2012 game/white/knight.png 
1003 Sat Feb 11 15:48:48 GMT 2012 game/white/pawn.png 
2440 Sat Feb 11 15:48:12 GMT 2012 game/white/queen.png 
837 Sat Feb 11 15:48:20 GMT 2012 game/white/rook.png 

エラーがコメントで示されているようにChessSquare.class

+0

あなたは最終的な瓶に何があるか確認しましたか? –

+0

.jarファイルの "white/XXX.png"ファイルを確認してください。 FYIでは、標準の "winzip"コマンド(JDK "jar"コマンドラインツールと同様)を使用してjarファイルを表示/編集できます。 – paulsm4

+0

http://i.stack.imgur.com/wPyuO.png - これは内側にチェスです。私が理解できないことは、なぜそれが日食からではなく、瓶からではないかということです。 – makey

答えて

0

で発生したファイル、あなたの瓶に見える(使用のWinZip、7zipを、またはそのような何か)リソースがどこにあるかを確認します。 「白い」ディレクトリにない場合は、jarビルドに何か問題があります。

なぜそれがEclipseで動作しているかは、Eclipseがプログラムを実行するときにクラスパスにリソースディレクトリを含むためです。これは、getClass()。getResource(...)呼び出しがpngを見つけることを意味します。

ファイルをEclipseのresourcesディレクトリに保存している場合は、ファイルをjarファイルのMETA-INFディレクトリにエクスポートして、リソースを調べることもできます。それが実行されている場合、Web環境にデプロイするために構築されるjarをセットアップすることができます(サーブレット3.0のフラグメントを参照)。

最後に、getClass()。getResource(...)を使用することに注意してください。その呼び出しを行うクラスのClassLoaderに関連付けられたリソースを見つけることだけに留意してください(ClassLoader階層の問題動作します)。後で拡張機能を提供して、他のイメージセットをjarファイルにパッケージングすることができます。そのような場合は、イメージをロードするために少しずつ異なるメカニズムに頼らざるを得なくなります(ClassLoader.getResourcesを参照)。

EDIT:厳密にはEclipseの問題です。 jarが構造化されている方法によれば、正しいパスは "game/white/king.png"です。

+0

私はまた、BlueJ、同じものと一緒に瓶にエクスポートしようとしたが、それはIDEからではなく、瓶から実行されます。私はJavaに新しいですが、その動作は私にとっては非常に奇妙です – makey

+0

イメージを含むリソースフォルダを右クリックし、プロパティをチェックします(これはプロジェクトのビルドプロパティを参照してください)。あなたが探しているものは、どのディレクトリにリソースがコピーされているかを示すものです。 Antや同様のツールでこれを行っていた場合、クラスディレクトリにリソースをコピーし、クラスディレクトリをjarまたはzip antタスクで事実の後に追加します。 – wort

0
img = new ImageIcon(getClass().getResource("/game/white/"+text+".png")); 

先頭のスラッシュと、接頭辞gameに注意してください。

+0

すでにDaveNewtonに伝えられているように、動作しません。実行しようとすると同じエラーが発生します。先頭のスラッシュがなければコンパイルされません。ここに投稿する前に、私はすでにアドレスの組み合わせを試してみました。( – makey

+0

* "試したすべての**可能な組み合わせのアドレス" *明らかにそうではありません。**それらのうちの1つが動作します。**また、 '/ 'がなければ、クラスファイルのパッケージから検索します。 –

0

私はばかだ、私は最終的にエラーがどこにあるかを考え出した。私が書いたように、出力は"file:/E:/Desktop/Chess/bin/game/white/Pawn.png"でした.Pawn.pngに大きなPの文字があります。しかし、実際の画像の名前は小文字で始まりました。それがうまくいかない理由です。まだ私のための謎なぜそれは日食で働いた

関連する問題