我有一个名为MyProject的Java项目。我有几个不同的包(为了这个问题的目的保持名称简单),如下所示:
src/PackageA
src/PackageA/PackageAa
src/PackageA/PackageAa/PackageAaa
src/PackageB
src/PackageB/PackageBa
src/PackageB/PackageBa/PackageBaa
我有一个班级
src/PackageA/PackageAa/PackageAaa/MyJavaFile.java
我有一张图片
src/PackageB/PackageBa/PackageBaa/MyImage.png
在MyJavaFile.java
内,我想声明MyImage.png
Image img = new Image(....what goes here?...)
我该怎么做?
答案 0 :(得分:17)
您可以致电Class.getResource
并指定以/
或ClassLoader.getResource
开头的路径,而不必担心/
:
URL resource = MyJavaFile.class
.getResource("/PackageB/PackageBa/PackageBaa/MyImage.png");
或:
URL resource = MyJavaFile.class.getClassLoader()
.getResource("PackageB/PackageBa/PackageBaa/MyImage.png");
基本上Class.getResource
将允许您指定相对于类的资源,但我不认为它允许您使用“..”等进行目录导航。
当然,如果你知道正确包装中的一个类,你可以使用:
URL resource = SomeClassInPackageBaa.class.getResource("MyImage.png");
(我假设您可以将URL
传递给相关的Image
构造函数。getResourceAsStream
和Class
上也有ClassLoader
。)
答案 1 :(得分:4)
您可以使用相对路径,因为相对路径是项目文件夹。
ImageIcon img = new ImageIcon("src/PackageB/PackageBa/PackageBaa/MyImage.png");
答案 2 :(得分:2)
/folderB/folderBa/folderBaa/MyImage.png
图像可以存储到项目文件夹位置.eg:/images/MyImage.png
然后尝试:
Image img = new Image(/images/MyImage.png);
运行jar文件中的程序时无法使用文件路径,尤其是当程序作为applet或WebStart应用程序加载时,您可以使用ClassLoader获取图像。
使用以下代码加载图片:
ClassLoader cldr = this.getClass().getClassLoader();
java.net.URL imageURL = cldr.getResource("/PackageB/PackageBa/PackageBaa/MyImage.png");
ImageIcon aceOfDiamonds = new ImageIcon(imageURL);
答案 3 :(得分:1)
这是处理JAR App中所有图像和图标的最佳方式。
将所有图片和图标压缩到自己的JAR文件后 - 通过将图像JAR文件添加到库选项卡中来配置构建路径,以便它现在包含在类路径中。
然后,只需在构造器的开头使用以下 3x代码行即可访问任何所需的图像,包括不接受简单ImageIcon的SystemTray图像。 s作为它的主要图标(我知道很奇怪)。 3x行是:
URL iconUrl = this.getClass().getResource("/image-iconb.png");
Toolkit tk = this.getToolkit();
imageIcon = tk.getImage(iconUrl);
(imageIcon只是一个声明为Image变量的构造函数) 现在您可以将窗口图标设置为:
setIconImage(imageIcon );
和同时通过声明设置系统TrayIcon时使用相同的变量:
trayIcon = new TrayIcon(imageIcon, "SystemTray Demo", popupMenu);
以上功能可让您轻松集中地声明Images或ImageIcons,而不会冒不将图像资源保存在正确位置的风险。它使它保持整洁,JAR包含在运行时自动编译的所有图像以及程序的分发。
作为奖励,一旦JAR在您的类路径中注册 - 您可以随时在同一个JAR中添加任何其他图像而不用任何大惊小怪 - 一切正常,添加的图像是即时可用于您的应用。
在我看来好多了。
答案 4 :(得分:0)
使用getResource方法读取src根目录中的资源。例如,以下代码从文件夹src / images中检索图像。
// Get current classloader
ClassLoader cl = this.getClass().getClassLoader();
// Create icons
Icon saveIcon = new ImageIcon(cl.getResource("images/save.gif"));
Icon cutIcon = new ImageIcon(cl.getResource("images/cut.gif"));
该示例假定应用程序的JAR文件中存在以下条目:
images/save.gif
images/cut.gif