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

Mar*_*ius 22 java macos icons dock

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

Zac*_*h L 26

虽然我不确定如何在运行时更改它,但您可以使用-Xdock:icon选项在命令行设置Dock图标,例如:

 >java -Xdock:icon=/path/myIcon.png myApp
Run Code Online (Sandbox Code Playgroud)

本文有很多有关将Java应用程序引入Mac的有用信息,您可能会对此处列出的Mac实用程序和工具以及此处列出的部署选项感兴趣(如果您想要,最后一个链接特别有用)在Java Webstart路线上).

  • @Martin Tuskevicius是的,这只适用于Mac,因此您可能希望为操作系统提供单独的脚本/发行版(对于Mac,您可以将该命令行捆绑在AppleScript中).在保持平台无关的同时,很难满足每个操作系统的需求. (3认同)
  • 请注意,对于 OS/X,您应该使用 **.icns** 作为停靠图标。 (2认同)

小智 17

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

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

  • 这对于 JDK 9+ 不再有效。看我的回答:[JDK9+的解决方案](/sf/answers/3984694171/) (3认同)
  • 是的,但该类已被弃用。 (2认同)

flo*_*all 11

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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


小智 9

如果您使用Eclipse,则可以将项目导出为Mac OS X Application Bundle并指定.icns文件以用作图标.
在Eclipse中,转到File> Export并在'Other'目录中选择'Mac OS X Application Bundle'选项.

单击下一步按钮.
然后,您将看到"应用程序包导出菜单".
此菜单上的最后一个选项是"图标".您可以在此处指定.icns文件以用作停靠图标.

2 Eclipse出口菜单的图片

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


Has*_*imi 7

对于Microsoft Windows

setIconImage(new ImageIcon("Football.png").getImage());
Run Code Online (Sandbox Code Playgroud)

对于Mac OS X.

import com.apple.eawt.Application;
Application.getApplication().setDockIconImage(new ImageIcon("Football.png").getImage());
Run Code Online (Sandbox Code Playgroud)

  • 问题是您无法在Windows计算机上导入“ com.apple.eawt.Application;”,因为它是Mac专用的。我最终使用了基于[此答案](http://stackoverflow.com/a/13400962/4660897)的解决方案,但是该解决方案似乎是一个非常麻烦的解决方法。 (2认同)