gpt4 book ai didi

java - setIconImage 仅在 eclipse 中有效,导出为可运行 jar 文件时无效

转载 作者:行者123 更新时间:2023-12-01 12:10:39 26 4
gpt4 key购买 nike

我已经搜索了一段时间来解决这个问题。我的工作区中有一个项目文件夹(该文件夹基本上是我的根目录),其中有一个名为 icon.gif 的文件。在我的程序中,我有以下内容:

package com.mgflow58.Main;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class Game {

public static void main(String[] args) {
JFrame window = new JFrame("Guppy's Adventure");
window.add(new GamePanel());
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
window.pack();
window.setLocationRelativeTo(null);
window.setVisible(true);
window.setIconImage(new ImageIcon("icon.gif").getImage());
}

}

当我运行它时,该图标在 Eclipse 中工作正常,但导出的 jar 文件不会像在 Eclipse 中那样显示该图标。知道为什么吗?我快要疯了,想弄清楚这个问题。

最佳答案

jar 文件包含其适当文件夹中所需的所有图像文件。

有问题...ImageIcon(String) 正在寻找指定的磁盘上的文件,如 JavaDocs 中所述...

public ImageIcon(String filename)

Creates an ImageIcon from the specified file. The image will be preloaded by using MediaTracker to monitor the loading state of the image. The specified String can be a file name or a file path. When specifying a path, use the Internet-standard forward-slash ("/") as a separator. (The string is converted to an URL, so the forward-slash works on all systems.) For example, specify:

new ImageIcon("images/myImage.gif")

The description is initialized to the filename string.

Parameters:
filename - a String specifying a filename or path

资源不再驻留在磁盘上,但也不再嵌入 Jar 文件中,因此无法再使用基于 File 的方法访问它们。

相反,您需要使用诸如 Class#getResource 之类的东西,例如......

window.setIconImage(new ImageIcon(Game.class.getResource("icon.gif")).getImage());

话虽如此,出于多种原因,我还建议使用 ImageIO 而不是 ImageIcon,但主要是因为如果资源可以'它实际上会抛出异常由于某种原因不会被加载,而不是默默地失败......

看看Reading/Loading an Image了解更多详情

关于java - setIconImage 仅在 eclipse 中有效,导出为可运行 jar 文件时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27306872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com