好吧,所以我创建了一个在JLabel上显示的缓冲图像。当我显示文件位置时,它需要在我想要访问的文件夹前面的src /,否则会出现错误,我不会看到缓冲图像......我知道如果我把'src /'在resImg之前,BufferedImage不会显示在IDE之外。有人可以帮忙吗? 这是在IDE内部运行的代码。从.jar文件向外部运行时,图像不会显示。
static File f = new File("src/resImg/banner.png");
try {
banner = ImageIO.read(f);
picLabel = new JLabel(new ImageIcon(banner));
LabelPanel.add(picLabel);
} catch (IOException ex) {
Logger.getLogger(GameStart.class.getName()).log(Level.SEVERE, null, ex);
}
答案 0 :(得分:2)
当资源位于jar文件中时,它不是本地文件系统上的文件。你应该使用
URL imageSource = getClass().getResource("/resImg/banner.png");
if (imageSource == null) {
// Handle the resource being missing
}
picLabel = new JLabel(new ImageIcon(imageSource));
这里你从类加载器中获取资源,显然可以访问jar文件中的文件。
答案 1 :(得分:1)
如果你想从jar获取图像,请使用这样的smth:
URL imageurl = getClass().getResource("/images/imagename");
答案 2 :(得分:1)
您无法在JAR文件中为资源创建File
对象。请改用它。
URL imgurl = this.getClass().getClassLoader().getResource("resImg/banner.png");
picLabel - new JLabel(new ImageIcon(imgurl));
希望这有帮助。
答案 3 :(得分:1)
您必须找到父目录,相对路径可以从
开始相对路径是从java进程开始的“realtiv”,因此路径可能会不时发生变化。
如果图片放在广口瓶中,您可以使用
getClass().getResource("relativ jar path")
用于查找图像。罐子本身就知道它放在哪里。
答案 4 :(得分:0)
最可能的原因是你的图像没有打包在jar文件中(用jar / zip工具验证)。
如果图像在那里但没有显示,那是因为你试图从文件系统相对于工作目录读取它(当然不存在)
因此,正确的解决方案是从类路径中读取图像:
Thread.currentThread().getContextClassloader().getResourceAsStream(... path to your image relative to jar root ---)