我在Netbeans上做了一个JavaFX应用程序,我把下面的代码用于设置图标到窗口
primaryStage.getIcons().add(new Image("file:sicadcam.png"));
,当我从Netbeans运行项目时,它工作正常:图标出现在窗口的左上角和任务栏中。该映像位于项目的根目录中。
当我清理和构建项目时,它生成两个安装程序:一个exe和一个msi;当我安装应用程序并打开它时,窗口没有图标sicadcam.png,它有默认的java徽标图标。
如何或在哪里设置图像的路径,以便在安装应用程序时出现图标
2023年4月更新
图标可以在不同的地方显示,例如在任务栏或dock中,在安装程序中,或在已安装的应用程序设置管理器操作系统中,关联文件的图标,桌面快捷方式图标等。它们显示的位置和方式取决于操作系统。
JavaFX对图标的内置支持相当有限。
如果你有一个带有标题的舞台,你可以从舞台上获取图标,并在那里添加一个图像,形成一个图标,显示在舞台标题旁边。这并没有看起来那么有用,因为这个图标唯一能看到的地方是在窗口框架中,而不是在OS X的dock或安装程序、程序管理器或应用程序商店(我不确定Windows的任务栏,因为我没有测试过)。
现代OS X应用程序通常不会在其窗口标题栏中显示图标,因此,从某种意义上说,至少对于OS X来说,在标题区域放置图标有点像UI反模式。
让应用程序的图标显示在操作系统将显示的标准位置的最佳方法是使用jpackage
之类的工具,构建一个可安装的应用程序包,其中包括安装包中所需的图标(以各种操作系统推荐的大小和格式)。这样做的方法和方式是复杂的和平台特定的,我建议咨询jpackage
文档和特定于操作系统的应用程序图标建议。在安装包中包含应用程序图标的打包过程不是JavaFX API、框架和工具集的一部分。jpackage
是所有现代JDK(例如JDK 17+)附带的标准工具。
使用jpackage
打包时使用的各种图标格式和资源的文档。
这个答案的其余部分在很大程度上是过时的,但只是出于历史原因。
这只是问题的部分答案,因为我无法在Windows任务栏中生成一个显示已安装应用程序图标的自包含包。我可能错过了一个步骤,有环境问题,或者自包含应用程序的图标配置可能有轻微的错误,可能会在以后的版本中修复。测试在:jdk7u21, NetBeans 7.3, Win7, InnoSetup.
从资源而不是文件中获取图标图像。
例如,如果您将图像放在应用程序类的源目录中:
new Image(MyApplication.class.getResource("sicadcam.png").toExternalForm());
对于已安装的应用程序,这将只设置显示在屏幕左上角的图标。要为任务栏、桌面等设置图标,请按照JavaFX部署指南中的Self-Contained Packaging部分的说明进行操作。
例如,为了在我的Windows 7上为我的自包含应用程序获得安装程序的图标,我需要将图标放置在<netbeansprojectdir>/package/windows/<myappname>.ico
(需要为安装程序打包程序选择它)文件中,并确保我的ant路径配置正确,详见如何更改JavaFx原生Bundle exe图标(希望在以后的NetBeans/JavaFx版本中不需要手动ant配置)。
从Oracle下载Ensemble样例应用程序,看看包目录是如何为特定于平台的图标布局的。不幸的是,当我尝试从命令行构建Ensemble时,当Ensemble作为一个自包含的应用程序安装和执行时,我也无法让Windows 7在任务栏中使用Ensemble图标。
确保构建系统将图标复制到包含应用程序的jar文件中。要检查这一点,请进入已安装应用程序的app目录,并运行jar tvf <yourappjar>.jar
=>它应该显示图标资源文件在jar中的位置。
可以使用getClass(). getresourcesstream ("path.png")getResourceAsStream("path")返回一个输入流,用于任何你需要的文件的路径,例如图标win.getIcons()。add(新形象(getClass () .getResourceAsStream("path.png")));如果你正在制作一个jar文件,它会运行异常