netbeans 如何在JavaFX应用程序的窗口中设置图标?

wxclj1h5  于 2023-04-21  发布在  Java
关注(0)|答案(2)|浏览(261)

我在Netbeans上做了一个JavaFX应用程序,我把这段代码用于设置窗口的图标
primaryStage.getIcons().add(new Image("file:sicadcam.png"));
当我从Netbeans运行项目时,它工作正常:图标出现在窗口的左上角和任务栏中。2图像在项目的根目录中。
当我清理和构建项目时,它会生成两个安装程序:一个exe和一个msi;当我安装并打开应用程序时,窗口没有图标sicadcam.png,它有默认的Java徽标图标。
如何或在哪里可以设置图像的路径,以便在安装应用程序时显示图标。

2admgd59

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打包时使用的各种图标格式和资源的文档。

**这个答案的其余部分在很大程度上已经过时,但由于历史原因而被留下。

  • 这只是对问题的部分回答,因为我无法生成一个自包含的软件包,该软件包在Windows任务栏中显示已安装应用程序的图标。我可能错过了一个步骤,有环境问题,或者自包含应用程序的图标配置可能有点错误,可能会在以后的版本中修复。测试是:jdk7u21、NetBeans 7.3、Win7、InnoSetup。*

从资源而不是文件中获取图标图像。
例如,如果将图像放在应用程序类的源目录中:

new Image(MyApplication.class.getResource("sicadcam.png").toExternalForm());

对于已安装的应用程序,这将只设置显示在屏幕左上角的图标。要设置任务栏,桌面等图标,请按照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中的位置。

dwbf0jvd

dwbf0jvd2#

你可以通过使用getClass().getResourceAsStream(“path.png”)getResourceAsStream(“path”)是返回一个输入流的路径的任何文件,你是需要它的,例如图标win.getIcons().add(new Image(getClass().getResourceAsStream(“path.png”));如果你正在创建一个jar文件,它运行时没有异常

相关问题