为了账号安全,请及时绑定邮箱和手机立即绑定

使用getClass()加载资源.getResource()

使用getClass()加载资源.getResource()

慕森卡 2019-08-28 13:45:44
使用getClass()加载资源.getResource()我正在尝试加载图像以用作我的应用程序中的图标。根据本教程的适当方法是: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;     }}因此,我放置了文件的位置,并将其作为参数传递给此函数。这不起作用,即imgURL为null。当我尝试通过显式传递路径来创建ImageIcon时:ImageIcon icon  = new ImageIcon(path,"My Icon Image");它工作得很好!因此,应用程序可以从显式定义的路径中获取图像,但是没有使用getResources()来获取图像。在这两种情况下,path变量的值都是相同的。为什么它不起作用?如何通过类加载器找到资源?谢谢。
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

您可以使用以下格式请求路径:

/package/path/to/the/resource.ext

甚至用于在内存中创建类的字节也是这样找到的:

my.Class -> /my/Class.class

并且getResource会给你可以用来检索一个URL InputStream

但是......我建议直接getClass().getResourceAsStream(...)使用相同的参数,因为它直接返回InputStream,而不必担心创建一个(可能很复杂的)URL对象,该对象必须知道如何创建InputStream。

简而言之:尝试使用getResourceAsStreamImageIcon使用一个构造函数InputStream作为参数。

类加载器

如果您的应用程序有许多类加载器,请小心。如果你有一个简单的独立应用程序(没有服务器或复杂的东西),你不必担心。我不认为这ImageIcon是能够找到它的情况。

编辑:classpath

getResourceis-as mattb说 - 用于从类路径(从.jar或classpath目录)加载资源。如果您正在捆绑一个应用程序,那么完全可以使用它,因此您可以将图标文件包含在应用程序的jar中并以此方式获取。


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 1456 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信