我正在使用一些图像JFrame,我已经给出了将图像加载到帧的面板中的路径,但是当我制作应用程序的jar时它不显示图像.
我应该在哪里放置图像?
我该如何指定路径?
setIconImage(Toolkit.getDefaultToolkit().getImage(
"D:\\RFT\\src\\dailogBox\\dump.jpg"));
Run Code Online (Sandbox Code Playgroud)
像这样我做了.
Mne*_*nth 42
第一步:将图像放在JAR文件中的已定义位置.如果你把它放到src文件夹中,也许你的IDE或你的构建工具会自动将它打包到JAR.否则,请检查IDE/build-tool的文档,您需要在哪个位置放置它.
第二步:从程序中访问该文件.我假设您将它放在包(JAR中的路径)package1/package2中,该文件名为dump.jpg.在这种情况下,你打电话:
setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/package1/package2/dump.jpg")));
Run Code Online (Sandbox Code Playgroud)
getClass().getResource(...)返回类路径上资源的URL.使用'/'在类路径中启动路径,并使用资源的完整路径/包,用'/'分隔.
这是处理JAR应用程序中所有图像和图标的最佳方式.
将所有图像和图标压缩到自己的JAR文件后 - 通过将图像JAR文件添加到库选项卡中来配置构建路径,以使其现在包含在类路径中.
然后在构造函数的开头简单地使用以下3行代码来访问任何包含SystemTray图像的图像,这些图像不接受简单的ImageIcon作为其主要图标(我知道很奇怪).3x行是:
URL iconUrl = this.getClass().getResource("/image-iconb.png");
Toolkit tk = this.getToolkit();
someimgicon = tk.getImage(iconUrl);
Run Code Online (Sandbox Code Playgroud)
(someimgicon只是一个声明为Image变量的构造函数) 现在您可以将窗口图标设置为:
setIconImage(someimgicon);
Run Code Online (Sandbox Code Playgroud)
并在设置System TrayIcon时同时使用相同的变量,声明:
trayIcon = new TrayIcon(someimgicon, "SystemTray Demo", popupMenu);
Run Code Online (Sandbox Code Playgroud)
上面的内容允许您轻松集中地声明Images或ImageIcons,而不会冒不将图像资源保存在正确位置的风险.它保持了它的整洁,JAR包含在运行时自动编译的所有图像以及程序的分发.
作为奖励,一旦JAR在您的类路径中注册 - 您可以随时将任何其他图像添加到同一个JAR中,而不会有任何大惊小怪 - 一切正常,添加的图像可立即供您的应用使用.
我认为好多了.