从不同包中的类加载包内的Java Image
我有一个名为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 MyImage.png
Image img = new Image(....what goes here?...)
我怎样才能做到这一点?
您可以调用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
构造函数。在Class
和ClassLoader
上也有getResourceAsStream
。)
您可以使用相对路径,因为相对路径是项目文件夹。
ImageIcon img = new ImageIcon("src/PackageB/PackageBa/PackageBaa/MyImage.png");
/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);
这是处理JAR App中所有图像和图标的最佳方式。
将所有图像和图标压缩到自己的JAR文件后 – 通过将图像JAR文件添加到库选项卡中来配置构建路径,以使其现在包含在类路径中。
然后在构造器的开头简单地使用以下3行代码来访问任何所需的图像,包括不接受简单ImageIcon作为其主图标的SystemTray图像(我知道很奇怪)。 3x行是:
URL iconUrl = this.getClass().getResource("/image-iconb.png"); Toolkit tk = this.getToolkit(); imageIcon = tk.getImage(iconUrl);
(imageIcon只是一个声明为Image变量的构造函数) 现在您可以将窗口图标设置为:
setIconImage(imageIcon );
并在设置System TrayIcon时同时使用相同的变量,声明:
trayIcon = new TrayIcon(imageIcon, "SystemTray Demo", popupMenu);
上面的内容允许您轻松集中地声明Images或ImageIcons,而不会冒不将图像资源保存在正确位置的风险。 它保持了它的整洁,JAR包含在运行时自动编译的所有图像以及程序的分发。
作为奖励 ,一旦JAR在您的类路径中注册 – 您可以随时将任何其他图像添加到同一个JAR中,而不会有任何大惊小怪 – 一切正常,添加的图像可立即供您的应用使用。
我认为好多了。
使用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