如何更改 Java 程序的 Dock 图标?

问题描述 投票:0回答:7

如何在 Macintosh 平台上用 Java 更改程序的 Dock 图标?我听说过使用 Apple 的 Java 库(它在 Mac 平台上提供了某种额外的支持),但我还没有找到一些实际的例子。

java macos icons dock
7个回答
30
投票

虽然我不确定如何在运行时更改它,但您可以在命令行中使用

-Xdock:icon
选项设置 Dock 图标,例如:

 >java -Xdock:icon=/path/myIcon.png myApp

这篇文章 有很多关于将 Java 应用程序引入 Mac 的有用小信息,您可能有兴趣查看 here 列出的适用于 Mac 的实用程序和工具,以及 here 列出的部署选项(最后一个链接是如果您想沿着 Java Webstart 路线走下去,特别有用。


19
投票

Apple eAWT 提供了 Application 类,允许更改应用程序的停靠栏图标。

import com.apple.eawt.Application;
...
Application application = Application.getApplication();
Image image = Toolkit.getDefaultToolkit().getImage("icon.png");
application.setDockIconImage(image);

19
投票

Java 9 及更高版本的解决方案

在 JDK 9 中,内部 API(例如 Mac OS X com.apple.eawt 包中的 API)将不再可用。

参见:http://openjdk.java.net/jeps/272

package main;

import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Image;
import java.awt.Taskbar;
import java.awt.Toolkit;
import java.net.URL;

/**
 * author: flohall
 * date: 2019-07-07
 */
public final class Main {

    public static void main (String[] args){

        final JFrame jFrame = new JFrame();

        //loading an image from a file
        final Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
        final URL imageResource = Main.class.getClassLoader().getResource("resources/images/icon.gif");
        final Image image = defaultToolkit.getImage(imageResource);

        //this is new since JDK 9
        final Taskbar taskbar = Taskbar.getTaskbar();

        try {
            //set icon for mac os (and other systems which do support this method)
            taskbar.setIconImage(image);
        } catch (final UnsupportedOperationException e) {
            System.out.println("The os does not support: 'taskbar.setIconImage'");
        } catch (final SecurityException e) {
            System.out.println("There was a security exception for: 'taskbar.setIconImage'");
        }

        //set icon for windows os (and other systems which do support this method)
        jFrame.setIconImage(image);

        //adding something to the window so it does show up
        jFrame.getContentPane().add(new JLabel("Hello World"));

        //some default JFrame things
        jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
        jFrame.pack();
        jFrame.setVisible(true);
    }
}

此代码可以按原样使用。只需更改图像的路径即可。
这种为 mac os dock 设置图标的新实现方式(在 JDK 9+ 中)比以前更好,因为您在构建应用程序时不会遇到任何问题。在 Windows 计算机上使用此代码也没有问题。不推荐使用反射,因为也不需要 Java 9。


9
投票

如果您使用 Eclipse,您可以将项目导出为 Mac OS X 应用程序包,并指定一个 .icns 文件用作图标。
在 Eclipse 中,转到“文件”>“导出”并选择“其他”目录中的“Mac OS X 应用程序捆绑包”选项。

单击下一步按钮。
然后您将看到“应用程序包导出菜单”。
此菜单上的最后一个选项是“图标”。这是您指定 .icns 文件用作停靠栏图标的地方。

2 Eclipse 导出菜单的图片

就创建 .icns 文件而言,您可以使用 Apple 的 Icon Composer 从图像文件创建 .icns 文件。 这是制作 mac 图标的好教程。


5
投票

对于 Microsoft Windows

setIconImage(new ImageIcon("Football.png").getImage());

对于 Mac OS X

import com.apple.eawt.Application;
Application.getApplication().setDockIconImage(new ImageIcon("Football.png").getImage());

0
投票

如果你安装了 XCode,你可以使用 JarBundler 使用 Jar 文件创建 Mac App。如果你没有 XCode,你可以使用这个 JarBundler:

http://sourceforge.net/projects/jarbundler/

在创建打包器的过程中,您可以在.icns 扩展名中选择一个图标。那将是您的 Dock 图标。


0
投票

Java 17 的修复:使用 javafx

final Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
java.awt.Image image = defaultToolkit.getImage(getClass().getResource("/resources/images/YOURICON.png"));
final Taskbar taskbar = Taskbar.getTaskbar();

taskbar.setIconImage(image);
© www.soinside.com 2019 - 2024. All rights reserved.