我正在尝试加载图像以用作我的应用程序中的图标.根据本教程的适当方法是:
protected ImageIcon createImageIcon(String path, String description)
{
java.net.URL imgURL = getClass().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我放置了文件的位置,并将其作为参数传递给此函数.这不起作用,即imgURL为null.当我尝试通过显式传递路径来创建ImageIcon时:
ImageIcon icon = new ImageIcon(path,"My Icon Image");
Run Code Online (Sandbox Code Playgroud)
它工作得很好!因此,应用程序可以从显式定义的路径中获取图像,但是没有使用getResources()来获取图像.在这两种情况下,path变量的值都是相同的.为什么它不起作用?如何通过类加载器找到资源?
谢谢.
hel*_*ios 15
您可以使用以下格式请求路径:
/package/path/to/the/resource.ext
Run Code Online (Sandbox Code Playgroud)
甚至用于在内存中创建类的字节也是这样找到的:
my.Class -> /my/Class.class
Run Code Online (Sandbox Code Playgroud)
并且getResource
会给你可以用来检索一个URL InputStream
.
但是......我建议直接getClass().getResourceAsStream(...)
使用相同的参数,因为它直接返回InputStream,而不必担心创建一个(可能很复杂的)URL对象,该对象必须知道如何创建InputStream.
简而言之:尝试使用getResourceAsStream
并ImageIcon
使用一个构造函数InputStream
作为参数.
类加载器
如果您的应用程序有许多类加载器,请小心.如果你有一个简单的独立应用程序(没有服务器或复杂的东西),你不必担心.我不认为这ImageIcon
是能够找到它的情况.
编辑:classpath
getResource
is-as mattb说 - 用于从类路径(从.jar或classpath目录)加载资源.如果您正在捆绑一个应用程序,那么完全可以使用它,因此您可以将图标文件包含在应用程序的jar中并以此方式获取.
J.E*_*zyk 10
作为一个noobie,我对此感到困惑,直到我意识到所谓的"路径"是相对于MyClass 的路径.文件系统中的类文件而不是MyClass.java文件.我的IDE将资源(如xx.jpg,xx.xml)复制到MyClass.class的本地目录.例如,在名为"target/classes/pkg"的pkg目录中.对于不同的IDE,类文件位置可能不同,具体取决于应用程序的构建方式.您应首先浏览文件系统并找到MyClass.class文件以及您要提取的关联资源的复制位置.然后确定相对于MyClass.class文件的路径,并将其写为带有"dots"和""的字符串值
例如,以下是我如何将app1.fxml文件提供给我的javafx应用程序,其中相关的"MyClass.class"隐式为"Main.class".Main.java文件是包含此行资源调用代码的位置.在我的特定情况下,资源被复制到与封闭包文件夹相同级别的位置.即:/ target/classes/pkg/Main.class和/target/classes/app1.fxml.所以解释......相对引用"../app1.fxml"是"从Main.class开始,上一个目录级别,现在你可以看到资源".
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("../app1.fxml"));
Run Code Online (Sandbox Code Playgroud)
请注意,在此相对路径字符串"../app1.fxml"中,前两个点引用包含Main.class的目录和单个".".表示要遵循的文件扩展名.在这些细节成为第二天性之后,你会忘记它为何令人困惑.
归档时间: |
|
查看次数: |
118619 次 |
最近记录: |