我在Netbeans上做了一个JavaFX应用程序,我把这段代码用于设置窗口的图标primaryStage.getIcons().add(new Image("file:sicadcam.png"));
当我从Netbeans运行项目时,它工作正常:图标出现在窗口的左上角和任务栏中。2图像在项目的根目录中。
当我清理和构建项目时,它会生成两个安装程序:一个exe和一个msi;当我安装并打开应用程序时,窗口没有图标sicadcam.png,它有默认的Java徽标图标。
如何或在哪里可以设置图像的路径,以便在安装应用程序时显示图标。
2条答案
按热度按时间2admgd591#
2023年4月更新
图标可以显示在不同的位置,例如在任务栏或停靠栏中、在安装程序中或在已安装的应用程序设置管理器OS中,相关文件的图标、桌面快捷方式图标等。它们在何处以及如何显示取决于OS。
JavaFX对图标的内置支持非常有限。
如果你有一个有标题的stage,你可以从stage中获取图标,并在那里添加一个图像,形成一个图标,显示在stage标题旁边。这并不像看起来那么有用,因为图标只能在窗口框架中看到,而不是在OS X的dock或安装程序,程序管理器或应用商店(我不确定Windows任务栏,因为我没有测试过)。
现代OS X应用程序通常不会在窗口标题栏中显示图标,因此,在某种意义上,至少对于OS X,将图标放置在标题区域有点像UI反模式。
要使应用程序图标显示在操作系统将显示它们的标准位置,最好的方法是使用
jpackage
之类的工具来构建一个包含所需图标的可安装应用程序包(以各种OS推荐的大小和格式)。这样做的方式和方法是复杂的和特定于平台的,我建议参考jpackage
文档和操作系统特定的应用程序图标建议。在安装包中包含应用程序图标的打包过程不是JavaFX API、框架和工具集的一部分。jpackage
是所有现代JDK(例如JDK 17+)附带的标准工具。有关使用
jpackage
打包时使用的各种图标格式和资源的文档。**这个答案的其余部分在很大程度上已经过时,但由于历史原因而被留下。
从资源而不是文件中获取图标图像。
例如,如果将图像放在应用程序类的源目录中:
对于已安装的应用程序,这将只设置显示在屏幕左上角的图标。要设置任务栏,桌面等图标,请按照Self-Contained Packaging section of the JavaFX Deployment Guide中的说明操作。
例如,为了在我的Windows 7上为我的自包含应用程序获取安装程序的图标,我需要将图标放置在
<netbeansprojectdir>/package/windows/<myappname>.ico
(需要是一个.ico,以便安装程序打包器拾取它)文件中,并确保我的ant路径按照How to change JavaFx native Bundle exe icon中的详细说明正确配置(希望在以后的NetBeans/JavaFX版本中不需要手动ant配置)。从Oracle下载Ensemble sample application,看看包目录是如何为平台特定的图标布局的。不幸的是,当我尝试从命令行构建Ensemble时,我也无法让Windows 7在Ensemble作为一个独立的应用程序安装和执行时使用任务栏中的Ensemble图标。
确保你的构建系统将你的图标复制到包含你的应用程序的jar文件中。要检查这一点,进入你安装的应用程序的app目录并运行
jar tvf <yourappjar>.jar
=〉,它应该会显示图标资源文件在jar中的位置。dwbf0jvd2#
你可以通过使用getClass().getResourceAsStream(“path.png”)getResourceAsStream(“path”)是返回一个输入流的路径的任何文件,你是需要它的,例如图标win.getIcons().add(new Image(getClass().getResourceAsStream(“path.png”));如果你正在创建一个jar文件,它运行时没有异常