如何将 jnlp 与 OSX 停靠图标捆绑在一起;这在 java 首选项中似乎不再可能

Posted

技术标签:

【中文标题】如何将 jnlp 与 OSX 停靠图标捆绑在一起;这在 java 首选项中似乎不再可能【英文标题】:How can I bundle a jnlp with an OSX dock icon; this no longer appears to be possible in the java preferences 【发布时间】:2012-10-22 14:17:09 【问题描述】:

Oracle 的 JDK 7 Java Preferences 页面中似乎不存在将 JNLP 打包为应用程序的选项,正如苹果中所述 here

OS X 桌面与 Java Web Start 的集成让用户可以创建本地 来自任何 Java Web Start 应用程序的应用程序包。捷径 Java 首选项中的创建设置控制用户是否 打开 Java Web Start 时提示创建应用程序包 应用。捆绑的 Java Web Start 应用程序具有所有 本机应用程序包的好处,在“OS X 应用程序包。”

为了解决这个问题,我正在使用 Automator 创建一个 .app,它运行一个执行 JNLP 的 shell 脚本。这允许我使用应用程序图标,但我所有配置停靠图标的尝试都失败了。

我尝试使用iconutil 创建一个.icns 文件并将其添加到Resources 文件夹,然后在Contents/Info.plist 字段"Icon File" 下指定.icns 文件,但我仍然得到java 咖啡杯运行应用程序时 Dock 中的图标。

我尝试过的另一件事是将-Xdock:icon=icon.jpg 参数传递给javaws,但这似乎只适用于常规Java 程序。

【问题讨论】:

【参考方案1】:

我找到了解决问题的方法。您可以直接在 jnlp 中引用它,而不是将图标捆绑在 .app 文件中。 The JNLP Developer's guide 包含对 icon element 的描述

icon 元素:包含 GIF 或图像文件的 HTTP URL JPEG 格式。图标用于表示应用程序

在启动期间,Java Web Start 将应用程序呈现给 用户;在应用程序管理器中;在桌面快捷方式中。 64x64 图标 在下载过程中显示;在应用程序管理器和桌面中 使用 32x32 图标的快捷方式。 Java Web Start 自动调整大小 一个适当大小的图标。

它没有明确提到那里的 OSX 扩展坞,但快速测试表明它确实也将图标放在那里。

【讨论】:

【参考方案2】:

我会推荐一种不同的方法,它也可以帮助您使用其他部署方法(不仅仅是 jnlp)。

您可以在代码中使用反射来添加特定于 OSX 的代码。我已经在 Windows 上编译了我的应用程序并为 mac 添加了停靠图标。

javax.swing.ImageIcon icon = ...
Class c = Class.forName("com.apple.eawt.Application");
Method m = c.getMethod("getApplication");
Object applicationInstance = m.invoke(null);
m = applicationInstance.getClass().getMethod("setDockIconImage",  javax.swing.ImageIcon.class);
m.invoke(applicationInstance,icon);

【讨论】:

以上是关于如何将 jnlp 与 OSX 停靠图标捆绑在一起;这在 java 首选项中似乎不再可能的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX Ubuntu 舞台停靠图标不更新

如何将侦听器添加到 osx 上的 java 停靠图标

OS X 停靠图标中的 NSProgressIndicator 显示为灰色,如何制作标准蓝色

如何使用 setContentView 更改停靠图标以在 mac os x 中显示一个大字符

OSX 上的 QT:托盘图标 - 图标 Dock 问题

JavaFX 本机捆绑图标 OS X