【问题标题】:How do I change the default application icon in Java?如何更改 Java 中的默认应用程序图标?
【发布时间】:2008-10-16 18:58:37
【问题描述】:

我正在使用 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。

谁有有效的解决方案?

【问题讨论】:

标签: java icons


【解决方案1】:
java.net.URL url = ClassLoader.getSystemResource("com/xyz/resources/camera.png");

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

【讨论】:

  • 谢谢。这是为什么我们需要 StackOverflow 的完美示例。在我发布这个问题并在 5 分钟内得到答案之前,我通过谷歌搜索找到了 100 个不同的“解决方案”。
  • 把“/”放在前面很安全。此外,它还允许您使用相同的字符串并执行 getResourceAsStream,这有时更有用。
  • 哇——StackOverflow 的强大功能! :-)
  • 那么 png 文件实际存储在哪里?
  • JAR/classes/com/xyz/resources/camera.png 但是你应该使用 Maven 来管理你的项目和构建,所以在代码中它会是 PROJECT/src/main/resources 和 Maven将在其 Jar/War 创建阶段将其复制到正确的位置。
【解决方案2】:

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

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

别忘了导入:

import java.awt.Toolkit;

在源代码中!

【讨论】:

  • 图片的大小应该是多少,我导入的任何东西看起来都太小了,或者有瑕疵??
【解决方案3】:

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

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

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

【讨论】:

  • 如果您使用相对路径,然后在不同的包中创建子类,则该路径将不再有效并且您的代码将中断。使用绝对路径可以防止这种情况(例如“/com/xyz/resources/camera.png”)
【解决方案4】:

以后试试这个写

initcomponents();

setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("Your image address")));

【讨论】:

    【解决方案5】:
        /** 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 中使用的,效果很好

    【讨论】:

      【解决方案6】:

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

      this.setIconImage(new ImageIcon(getClass().getResource("/resource/icon.png")).getImage());
      

      【讨论】:

        【解决方案7】:

        您应该定义各种大小的图标,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);
        

        【讨论】:

          【解决方案8】:

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

          `   ImageIcon icon = new ImageIcon(".//Ressources//User_50.png");
              this.setIconImage(icon.getImage());`
          

          【讨论】:

            【解决方案9】:

            框架内构造函数

            try{    
                   setIconImage(ImageIO.read(new File("./images/icon.png")));   
               }
            catch (Exception ex){
                   //do something
               }
            

            【讨论】:

              【解决方案10】:

              例子:

              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);
              

              【讨论】:

                猜你喜欢
                • 2020-02-09
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-09-11
                • 2012-09-02
                • 1970-01-01
                相关资源
                最近更新 更多