我浪费了很多时间在这个上面。为什么这段代码无法导致该类的URL?
package org.test;
import java.net.URL;
public class Testa {
public Testa() {
String resourceName = "org/test/Testa.class";
String clazz = "org.test.Testa";
try {
Class.forName(clazz);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
URL url = this.getClass().getResource(resourceName);
System.out.println("Why is this null? >>> " + url);
}
public static void main(String[] args) {
new Testa();
}
}
答案 0 :(得分:0)
代码只需要提供类名:
URL url = this.getClass().getResource("Testa.class");
来自Java Doc:
给定类的二进制名称,类加载器应该尝试 找到或生成构成该类定义的数据。一个 典型的策略是将名称转换为文件名然后 从文件系统中读取该名称的“类文件”。
答案 1 :(得分:0)
资源的路径是相对于类路径的。
package org.test;
import java.net.URL;
public class Testa {
public Testa() {
String resourceName = "Testa.class"; // /org/test/Testa.class would be looking for /org/test/org/test/Testa.class
String clazz = "org.test.Testa";
URL url = this.getClass().getResource(resourceName);
}
public static void main(String[] args) {
new Testa();
}
}
答案 2 :(得分:0)
它将起作用,并将通过一次更正打印URL,如下所示。
*。在资源名称字符串前加上“/”。
String resourceName = "/org/test/Testa.class";
OR
*. String resourceName = "Testa.class";//No need to mention full path - resources work with relative path
原因是(来自JavaDoc)
如果名称以'/'('\ u002f')开头,则资源的绝对名称是'/'后面的名称部分。 否则,绝对名称具有以下形式: modified_package_name /名称
其中modified_package_name是此对象的包名称,其中'/'替换为'。' ( '\ u002e')。