我正在设置一个开发环境,我有一些代码困扰我:
public static URI getResource(Class<?> cl, String resource) {
URL url = cl.getResource(resource);
//etc...
}
问题是:url为null。有问题的资源是一个位于java文件的确切目录中的文件。这应该返回一个非null url。
许多人已成功安装此环境,但它在我的计算机上无效。
其他信息:
答案 0 :(得分:3)
类加载器期望从与.class文件相同的目录获取资源文件,而不是.java文件。根据Eclipse项目的配置方式,这些可能是不同的目录。
通常,您的构建过程会在创建.class文件时将资源文件复制到输出目录,但在这种情况下,可能它没有?
答案 1 :(得分:1)
cl.getResource(resource)
调用正在尝试在resource
的类加载器的类路径中找到与cl
字符串对应的资源。
这意味着resource
需要是相对于应用程序类路径的路径。
方法调用返回null
这一事实意味着类加载器无法找到所请求的资源。在运行单元测试之前,您需要检查资源是否被复制到正确的位置(由Eclipse或构建器)。
(linux / windows中不同文件上下文的问题?)
可能是资源名称区分大小写的问题。我怀疑它是否能为其他人正常运行,但值得检查。
此项目是否有build.xml
个文件?尝试使用Ant
从命令行运行测试。
此项目是否有pom.xml
个文件?尝试使用mvn test
从命令行运行测试。
答案 2 :(得分:0)
通过的课程是什么?如果它是J2SE类,则类加载器将是引导类加载器,并且不会找到应用程序资源。
答案 3 :(得分:0)
Class.getResource(String)
将在与.class相同的包文件夹中查找资源。
ClassLoader.getResource(String)
将在src文件夹中查找资源。
new File(String)
将在src文件夹外查找资源。