私はEclipseでJavaプロジェクトを開発しています。プログラムを配布するために、Eclipse のエクスポート機能を使用して実行可能な .jar ファイルを作成しました。
私のプログラムでは、「tableImages」というフォルダーに保存されているいくつかの画像をロードします。ClassLoader を介して画像を読み込みます (以下のコード スニペットを参照してください)。問題は次のとおりです。.jar ファイルからプログラムを実行すると、上記のフォルダーにある .png ファイルの 1 つをロードするときに NullPointerException がスローされます。面白いことに、まったく同じフォルダー内の .png ファイルの一部が正しく読み込まれているため、NullPointerException は発生しません。
jar tf コマンドを使用して .jar の内容を確認しました。ロードできないと思われるイメージが jar にパックされていました。では、この NullPointerException の原因は何ですか?どうすれば解決できますか?
これは、swing-frame に画像を描画するクラスです。
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import java.net.*;
public class LoadBackgroundImage extends Component {
private static final long serialVersionUID = 1L;
BufferedImage img;
public void paint(Graphics g){
g.drawImage(img, 0, 0, null);
}
public LoadBackgroundImage(String image){
URL url = ClassLoader.getSystemResource(image);
try{
img = ImageIO.read(url);
this.setSize(img.getWidth(), img.getHeight());
}catch(IOException e){
System.err.println(e.getMessage());
}
}
public Dimension getPreferredSize(){
if(img == null){
return new Dimension(100, 100);
}else{
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}
public BufferedImage getImage(){
return img;
}
}
ご助力ありがとうございます!