65

我正在使用 NetBeans,试图将熟悉的 Java 咖啡杯图标更改为我保存在 jar 文件的资源目录中的 png 文件。我发现许多不同的网页声称他们有解决方案,但到目前为止它们都不起作用。

这是我目前所拥有的(省略了 try-catch 块):

URL url = new URL("com/xyz/resources/camera.png");
Toolkit kit = Toolkit.getDefaultToolkit();
Image img = kit.createImage(url);
getFrame().setIconImage(img);

包含此代码的类位于com.xyz包中,如果这有什么不同的话。该类还扩展了 JFrame。此代码在第一行引发 MalformedUrlException。

有人有有效的解决方案吗?

4

10 回答 10

78
java.net.URL url = ClassLoader.getSystemResource("com/xyz/resources/camera.png");

可能需要也可能不需要路径前面的“/”。

于 2008-10-16T19:01:24.370 回答
14

您可以简单地转到 Netbeans,在设计视图中,转到JFrame属性,选择图标图像属性,iconImage使用“自定义代码”选择设置表单的属性,然后在Form.SetIconImage()函数中输入以下代码:

Toolkit.getDefaultToolkit().getImage(name_of_your_JFrame.class.getResource("image.png"))

不要忘记导入:

import java.awt.Toolkit;

在源代码中!

于 2013-01-16T09:41:28.170 回答
4

或者将图像放置在相对于类的位置,并且您不需要字符串本身中的所有包/路径信息。

com.xyz.SomeClassInThisPackage.class.getResource( "resources/camera.png" );

这样,如果您将类移动到不同的包中,则不必查找所有字符串,只需移动类及其资源目录即可。

于 2008-10-16T20:37:30.090 回答
4

试试这个写后

initcomponents();

setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("Your image address")));
于 2013-10-19T18:46:44.197 回答
3
    /** Creates new form Java Program1*/
    public Java Program1() 


    Image im = null;
    try {
    im = ImageIO.read(getClass().getResource("/image location"));
    } catch (IOException ex) {
    Logger.getLogger(chat.class.getName()).log(Level.SEVERE, null, ex);
    }
    setIconImage(im);

这是我在 netbeans 的 GUI 中使用的,它工作得很好

于 2012-10-24T01:05:45.803 回答
2

在扩展javax.swing.JFrame使用方法的类中setIconImage

this.setIconImage(new ImageIcon(getClass().getResource("/resource/icon.png")).getImage());
于 2013-09-21T00:58:44.540 回答
2

您应该定义各种大小的图标,Windows 和 Linux 发行版(如 Ubuntu)在任务栏和 Alt-Tab 中使用不同的图标。

public static final URL ICON16 = HelperUi.class.getResource("/com/jsql/view/swing/resources/images/software/bug16.png");
public static final URL ICON32 = HelperUi.class.getResource("/com/jsql/view/swing/resources/images/software/bug32.png");
public static final URL ICON96 = HelperUi.class.getResource("/com/jsql/view/swing/resources/images/software/bug96.png");

List<Image> images = new ArrayList<>();
try {
    images.add(ImageIO.read(HelperUi.ICON96));
    images.add(ImageIO.read(HelperUi.ICON32));
    images.add(ImageIO.read(HelperUi.ICON16));
} catch (IOException e) {
    LOGGER.error(e, e);
}

// Define a small and large app icon
this.setIconImages(images);
于 2016-07-24T00:48:46.133 回答
1

你可以试试这个,效果很好:

`   ImageIcon icon = new ImageIcon(".//Ressources//User_50.png");
    this.setIconImage(icon.getImage());`
于 2019-01-26T01:23:24.397 回答
0

内部框架构造函数

try{    
       setIconImage(ImageIO.read(new File("./images/icon.png")));   
   }
catch (Exception ex){
       //do something
   }
于 2017-10-21T18:32:24.467 回答
-1

例子:

URL imageURL = this.getClass().getClassLoader().getResource("Gui/icon/report-go-icon.png");
ImageIcon iChing = new ImageIcon("C:\\Users\\RrezartP\\Documents\\NetBeansProjects\\Inventari\\src\\Gui\\icon\\report-go-icon.png");      
btnReport.setIcon(iChing); 
System.out.println(imageURL);
于 2014-09-26T09:01:45.883 回答