0

今まで経験したことのない問題があり、Web 上で解決策を見つけることができませんでした。メニューを印刷するためにいくつかの画像を使用する小さなプログラムがあります。

これは、画像を印刷するために使用するクラスです。

public class ViewImage extends JPanel {
    private static final long serialVersionUID = 1L;
    protected Image image = null;

    public ViewImage(int x, int y, String path) {
        this(x, y, new ImageIcon(path).getImage());
    }

    public ViewImage(int x, int y, Image image) {
        this.image = image;
        this.setBounds(x, y, image.getWidth(null), image.getHeight(null));
    }

    public void paintComponent(Graphics g) {
        int x = ((this.getWidth() - image.getWidth(null)) / 2);
        int y = ((this.getHeight() - image.getHeight(null)) / 2);

        g.drawImage(image, x, y, null);
    }

    public void setImage(String path) {
        this.image = new ImageIcon(path).getImage();
    }
 }

私の画像はすべてクラスパスの一部であり、次のように呼び出します。

this.getClass().getClassLoader().getResource("MyImage.png").getPath()

プログラムをjarファイルにパッケージ化し、コンソールから実行するまでは正常に動作します:

java -jar MyJar.jar

私のプログラムはうまく起動しますが、画像が印刷されません。例外もエラーも何もありません。

何がそのような行動を引き起こす可能性がありますか?

4

2 に答える 2

4

すべての前に、リソースが正しくロードされていることを確認してください (たとえば、System.out() を使用)!

ImageIcon(String location)画像が hdd にないためコンストラクターを使用する代わりにImageIcon(URL location)、クラスパス (MyJar.jar!/path/to/image.png" など) の URL としてライブ圧縮されているため、画像の読み込みを次のように変更する必要があります。

this.getClass().getClassLoader().getResource("MyImage.png");
于 2013-08-15T09:59:21.647 に答える
1

コードの「.getPath()」部分は、URL の先頭部分を除外しています。
リソースがjarファイルの一部である場合、これが存在する必要があります。

「.getPath()」を削除して、完全な URL を使用することをお勧めします。
完全な URL を System.out.println などに出力することもお勧めです。

于 2013-08-15T10:19:31.943 に答える