1

私はこの質問をこのウェブサイト全体で見てきました。そして、私はほとんどすべての回答を読みました。必要なことを正確に行っているように感じますが、機能させることができません! プログラムが自己完結型になるように、いくつかのイメージを Runnable Jar にパッケージ化しようとしています。Eclipse でコードを実行すると、意図したとおりに動作します。しかし、実行可能な Jar を使用すると、プログラムが起動しません。画像を作成する行で NullPointerException が発生します。ファイルは、プロジェクトのソース フォルダー内の Resources というフォルダーにあります。これがコードです。これは、私が動作させようとしてきた単なるテスト プログラムであるため、不完全です。

import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class testgui extends JFrame{
private static JLabel label = new JLabel();
private static testgui gui = new testgui();
private static ArrayList<ImageIcon> sprites;

public static void main(String[] args) {

    // TODO Auto-generated method stub
    sprites = getImages();
    BufferedImage backgroundImage;
    try {
        backgroundImage = ImageIO.read(new testgui().getClass().getClassLoader().getResource("resources/runescapemap.png"));
        gui.setContentPane(gui.new ImagePanel(backgroundImage));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    gui.setLayout(new GridLayout(1,2));
    label.setIcon(sprites.get(0));
    gui.add(label);
    gui.setSize(1000,900);
    gui.setVisible(true);
}

private static ArrayList<ImageIcon> getImages(){
    ImageIcon autoTalkerLogo = new ImageIcon(new testgui().getClass().getClassLoader().getResource("Resources/autotalker-logo.png"));
    ImageIcon meterNormal = new ImageIcon(new testgui().getClass().getClassLoader().getResource("Resources/meter.png"));
    ImageIcon meterSafe = new ImageIcon(new testgui().getClass().getClassLoader().getResource("Resources/meter-safe.png"));
    ImageIcon meterNotSafe = new ImageIcon(new         testgui().getClass().getClassLoader().getResource("Resources/meter-notsafe.png"));
    ArrayList<ImageIcon> sprites = new ArrayList<ImageIcon>();
    sprites.add(autoTalkerLogo);
    sprites.add(meterNormal);
    sprites.add(meterSafe);
    sprites.add(meterNotSafe);
    return sprites;
}

class ImagePanel extends JComponent {
    private Image backgroundImage;
    public ImagePanel(Image image) {
        this.backgroundImage = image;
    }
    @Override
    protected void paintComponent(Graphics g) {
        g.drawImage(backgroundImage, 0, 0, null);
    }
}
}
4

1 に答える 1

1

フォルダーがResourcesではなく純粋に呼び出されている場合resources、それが問題である可能性があります。Windows ファイル システムでは大文字と小文字が区別されませんが、jar ファイルでは区別されません。

試す

...getResource("Resources/runescapemap.png")

後のgetResource doResourcesへの呼び出しではなくを使用することに注意してくださいresources

もちろん、逆の場合もあります。おそらく、あなたのフォルダーは実際にresourcesは であり、それは最初の呼び出しであり、他の 4 つは を使用する必要がありますresources。いずれにせよ、両方が正しいとは考えにくい...

于 2013-03-02T21:52:15.813 に答える