我有一个前所未有的问题,无法在网上找到解决方案。 我有一个小程序,它使用一些图像来打印菜单。
这是我用来打印图像的类:
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
我的程序启动良好,但没有打印图像。没有例外,没有错误, 什么都没有。
什么可能导致这种行为?
答案 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也是一个好主意。