如何更改 Java 程序的 Dock 图标?
Posted
技术标签:
【中文标题】如何更改 Java 程序的 Dock 图标?【英文标题】:How do you change the Dock Icon of a Java program? 【发布时间】:2011-08-25 18:11:30 【问题描述】:如何在 Macintosh 平台上更改 Java 程序的 Dock 图标?我听说过使用 Apple 的 Java 库(它在 Mac 平台上提供了某种额外的支持),但我还没有找到一些实际的例子。
【问题讨论】:
我是个赢家。但据我所知,Mac 上的 Dock 相当于 Win 上的任务栏。所以这让我想知道,也许简单地为您的 JFrame 调用setIconImage(new ImageIcon("path/to/icon").getImage());
可以解决您的问题?
【参考方案1】:
虽然我不确定如何在运行时更改它,但您可以在命令行中使用 -Xdock:icon
选项设置 Dock 图标,例如:
>java -Xdock:icon=/path/myIcon.png myApp
This article 有很多关于将 Java 应用程序引入 Mac 的有用信息,您可能有兴趣查看 here 列出的 Mac 实用程序和工具,以及 here 列出的部署选项(最后一个链接如果你想走 Java Webstart 路线,这特别有用)。
【讨论】:
我已经看到该代码被多次使用。如果我希望程序在多个平台上运行怎么办……如果我在 Windows 或 Linux 上运行该文件会不会导致问题? @Martin Tuskevicius 是的,这仅适用于 Mac,因此您需要为操作系统提供单独的脚本/发行版(例如,对于 Mac,您需要将该命令行捆绑在一个 applescript 中) .在保持与平台无关的同时满足每个操作系统的需求是很困难的。 您是否亲自尝试过使用 Apple 库的方法?我曾经下载过它,然后我做了 Application.setDockIcon(Image) 但 Dock Icon 只是一个空白区域。 这是一个 example,它为大多数平台使用 JWS 分布式 JAR,并为 Mac 添加了一个应用程序包 (.dmg
)。
请注意,对于 OS/X,您应该使用 .icns 作为停靠图标。【参考方案2】:
Apple eAWT 提供了Application 类,允许更改应用程序的停靠图标。
import com.apple.eawt.Application;
...
Application application = Application.getApplication();
Image image = Toolkit.getDefaultToolkit().getImage("icon.png");
application.setDockIconImage(image);
【讨论】:
是的,但该类已被弃用。 我认为只有公共构造函数和一些方法已被弃用,而不是整个类。 如果这也适用于 .icns,我会感到惊讶!所以我认为-Xdock:icon
是更好的解决方案。
这个sn-p应该放在代码库中的任何特定位置吗?当您将菜单栏设置为原生 OSX 时,它必须在任何 UI 代码之前发生(例如,在启动器包装器中)。这里是不是类似?
这不再适用于 JDK 9+。看我的回答:Solution for JDK9+【参考方案3】:
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 也不需要。
【讨论】:
【参考方案4】:如果您使用 Eclipse,您可以将项目导出为 Mac OS X 应用程序包并指定一个 .icns 文件用作图标。 在 Eclipse 中,转到 File>Export 并选择“Other”目录中的“Mac OS X Application Bundle”选项。
单击下一步按钮。 然后您将看到“应用程序包导出菜单”。 此菜单上的最后一个选项是“图标”。您可以在此处指定要用作停靠图标的 .icns 文件。
Picture of the 2 Eclipse Export Menus
就创建 .icns 文件而言,您可以使用 Apple 的 Icon Composer 从图像文件创建 .icns 文件。 Here is a good tutorial on making mac icons.
【讨论】:
@hcix 此选项是否仅在 Mac OS X 版本的 Eclipse 上可用?我安装了适用于 Windows 的 Eclipse,但没有 Mac OS X 应用程序捆绑选项。 @Igor 根据this question 的答案之一,安装 Eclipse Delta 包将允许您将应用程序导出到任何目标平台。 @hcix 你以前用过 delta pack 吗?它可以为 Mac 创建一个 .app 文件,为 windows 创建一个 .exe 安装文件吗?【参考方案5】:对于微软视窗
setIconImage(new ImageIcon("Football.png").getImage());
适用于 Mac OS X
import com.apple.eawt.Application;
Application.getApplication().setDockIconImage(new ImageIcon("Football.png").getImage());
【讨论】:
如果应用程序可以在 Mac 和 Windows 上运行呢?你如何使它兼容两者? 那么你需要条件来检查操作系统。 问题是您无法在 Windows 计算机上导入com.apple.eawt.Application;
,因为它是 Mac 特定的。我最终使用了基于 this answer 的解决方案,但该解决方案似乎是一个非常混乱的解决方法。
@TotZam 我和你在一起。我也遇到了这个问题。让我看看我能不能想出别的办法。
那太好了!同时,我添加了一个答案here,解释了我目前用来让代码在 Mac 和 Windows 上运行的方法。【参考方案6】:
如果您安装了 XCode,则可以使用 JarBundler 使用 Jar 文件创建 Mac 应用程序。如果你没有 XCode,你可以使用这个 JarBundler:
http://sourceforge.net/projects/jarbundler/
在创建捆绑程序期间,您可以在 .icns 扩展名中选择一个图标。那将是您的 Dock 图标。
【讨论】:
这个项目不再存在以上是关于如何更改 Java 程序的 Dock 图标?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 wxPython 应用程序中更改 Mac OS X 停靠图标