【问题标题】:getClass().getResource() in static context静态上下文中的 getClass().getResource()
【发布时间】:2014-06-24 17:31:41
【问题描述】:

我正在尝试使用此代码从静态方法获取资源(image.png,与此代码在同一个包中):

import java.net.*;

public class StaticResource {

    public static void main(String[] args) {
        URL u = StaticResource.class.getClass().getResource("image.png");
        System.out.println(u);
    }

}

输出只是'null'

我也试过StaticResource.class.getClass().getClassLoader().getResource("image.png"); ,它会抛出一个NullPointerException

我见过其他可行的解决方案,我做错了什么?

【问题讨论】:

  • 您遇到什么错误?你确定你的类路径中有图片吗?
  • ClassName.class 与 SomeClassReference.getClass() 完全相同。您正在获取 StaticResource 类的类。
  • @jgitter 它要么输出 null 要么抛出 NullPointerException
  • 不要这样使用。为什么使用getClassLoader()?只需使用StaticResource.class.getResource("image.png")
  • 始终尝试将资源放在 JAVA 代码之外,以便其他包的类更易于管理和重用。

标签: java url static getresource


【解决方案1】:

始终尝试将资源放在 JAVA 代码之外,以便其他包的类更易于管理和重用。

你可以尝试任何一个

// Read from same package 
URL url = StaticResource.class.getResource("c.png");

// Read from same package 
InputStream in = StaticResource.class.getResourceAsStream("c.png");

// Read from absolute path
File file = new File("E:/SOFTWARE/TrainPIS/res/drawable/c.png");

// Read from images folder parallel to src in your project
File file = new File("images/c.jpg");

// Read from src/images folder
URL url = StaticResource.class.getResource("/images/c.png")

// Read from src/images folder
InputStream in = StaticResource.class.getResourceAsStream("/images/c.png")

【讨论】:

  • 我没有得到最后 3 个 - 他们似乎对某些项目的结构做出了假设,这可能(或者更确切地说可能不)适用于其他人的设置。
  • 我想尝试将资源保留在包之外。
  • 只需创建图片文件夹,将所有图片放入该文件夹即可。
【解决方案2】:

删除“.getClass()”部分。 只需使用

URL u = StaticResource.class.getResource("image.png");

【讨论】:

  • +1 X.class.getClass() 始终是 Class 类,因为所有类都有 Class 类型,因为它是由引导加载程序加载的,它几乎从来没有你想要的资源. ;)
猜你喜欢
  • 2013-01-13
  • 1970-01-01
  • 2012-12-14
  • 2014-04-05
  • 2014-01-20
  • 1970-01-01
  • 2013-11-30
相关资源
最近更新 更多