运行java -jar时未绘制Java映像

时间:2013-08-15 09:51:25

标签: java swing

我有一个前所未有的问题,无法在网上找到解决方案。 我有一个小程序,它使用一些图像来打印菜单。

这是我用来打印图像的类:

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

我的程序启动良好,但没有打印图像。没有例外,没有错误, 什么都没有。

什么可能导致这种行为?

2 个答案:

答案 0 :(得分:4)

在确保资源正确加载之前(例如使用System.out())!

而是使用ImageIcon(String location)使用ImageIcon(URL location)构造函数,因为您的图像不在硬盘驱动器上,而是在类路径中实时压缩为URL(类似于MyJar.jar!/path/to/image.png“ );您必须修改图像加载

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

答案 1 :(得分:1)

代码中的“.getPath()”部分排除了网址的前导部分 如果您的资源是jar文件的一部分,则需要存在此信息。

我建议你删除“.getPath()”并使用完整的URL 例如,在System.out.println中打印完整的URL也是一个好主意。