当我们将应用程序从Java 5/6转换为Java 7时,Dock上安装的图标不再按预期运行。以前,Dock上的图标将启动我们的应用程序,然后显示为活动应用程序,这对于MacOS来说是正常的。
当我们切换到Java 7时,安装的Dock图标在单击时会弹回,短暂更改为通用窗口图标,然后恢复并变为非活动状态。取而代之的是Dock上出现一个新图标(对于尚未保存在Dock中的应用程序),具有正确的外观,但标题为JavaApplicationStub。如果用户随后在此应用程序上选择了Options-> Keep In Dock,则该图标将在退出时恢复为通用控制台应用程序图标。
我知道JavaApplicationStub是MacOS X启动的实际可执行文件的名称,然后启动JVM。我不明白为什么我们的应用程序不再显示其实际标题,也不知道为什么在它运行时出现新图标。
我试图通过将CFBundleDisplayName添加到生成的Info.plist以及必要的InfoPlist.strings文件(在Contents / Resources / en.lproj中)来解决此问题,但这并没有改变任何内容。
有趣的是,我还发现,在通过运行生成的安装程序更新Dock后,Install4j本身会恢复此行为。
我在这里做错了吗? Install4j中是否有选项从Java 5/6(使用Apple JRE)切换到Java 7(使用捆绑的JRE 1.7.0_67)时我应该更改?
更多细节:我们让Install4j生成的启动器调用一个存根jar文件,其中包括执行"静默更新"自修补操作。一旦应用了更新(如果有),我们将在同一JVM中使用URLClassLoader
的新实例启动我们的主应用程序,如下所示:
URLClassLoader cload = URLClassLoader.newInstance(new java.net.URL[]{new java.io.File(silentUpdate.getLocalInstallFolder() + FILENAME_JAR).toURI().toURL()});
Class<?> cl = cload.loadClass(MAIN_CLASS);
Method startMethod = cl.getMethod("main", new Class[]{String[].class});
startMethod.invoke(cl, new Object[]{args});