-1

画像を読み込んでアイコン付きのボタンを作成するアプリケーションがあります。IDE から起動した場合は問題なく動作しますが、エクスポートされた jar ファイルから起動すると、イメージのフェッチ エラーが発生します。

画像の場所 :

+Project
   -Source Packages
      -Tools
         -start.jpg

使用されるコード:

     static final String STARTIMAGE = "/Tools/start.JPG";

public static JButton createStartButton() {

    Image img = Toolkit.getDefaultToolkit().getImage(GUITools.class.getResource(STARTIMAGE));

    JButton b = new JButton("",new ImageIcon(img));
    b.setPreferredSize(smallButton);
    b.setMaximumSize(smallButton);
    b.setMinimumSize(smallButton);

    return b;       

さて、最も奇妙なことは、別の画面でボタンがまったく同じ方法で作成され、これが正常に機能することです... コード:

static final String PREVIOUSIMAGE = "/Tools/previous.gif";

public JButton createPreviousButton(){

    Image img = Toolkit.getDefaultToolkit().getImage(getClass().getResource(PREVIOUSIMAGE));
    JButton b = new JButton("Previous",new ImageIcon(img));
    b.setPreferredSize(dimensionButton);
    b.setMaximumSize(dimensionButton);
    b.setMinimumSize(dimensionButton);      

    return b;       
}

唯一の違いは一方が静的であることですが、他方のように非静的にしても機能しません。

この良いトピックを含め、このフォーラムや他のサイトで見つけたすべてを試しました。

jar ファイルに画像をバンドルする方法 (トピックの最後に生成された URL は単に「null」です)

何も機能していないようです...助けてください!

ありがとう!

4

2 に答える 2

0

IDE から起動した場合は問題なく動作しますが、エクスポートされた jar ファイルから起動すると、イメージのフェッチ エラーが発生します。

Image img = Toolkit.getDefaultToolkit().getImage(getClass().getResource(PREVIOUSIMAGE));

上記のこのアプローチは正しくありません。代わりにこれを使用してください。

private static BufferedImage readBufferedImage (String imagePath) {
    try {
        InputStream is = YourClassName.class.getClassLoader().getResourceAsStream(imagePath);
        BufferedImage bimage = ImageIO.read(is);
        is.close();
        return bimage;
    } catch (Exception e) {
        return null;
    }
}

また、アプリケーションの起動時にすべての画像を読み込んでから使用することをお勧めします。

于 2013-01-24T14:13:47.233 に答える