Class.getResource()在我的Eclipse Application中返回null?无法配置classpath?

时间:2011-09-29 19:16:28

标签: java eclipse classpath

我正在尝试使用Class.getResource("rsc/my_resource_file.txt")在Eclipse应用程序中加载文件。但是,无论我在Eclipse中做什么,类路径总是只包含Eclipse Launcher的一个条目:

  

... /日蚀/插件/ org.eclipse.equinox.launcher_1.2.0.v20110502.pkc

如何配置类路径?

注意:在运行时,我使用以下代码确定类路径:

URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader();
for (URL classpathURL : cl.getURLs()) {
    System.out.println(classpathURL);
}

编辑:更多信息。

问题的根源是Class.getResource("rsc/my_resource_file.txt")返回null。在一个简单的5行“Java应用程序”中做了一些小实验,我以为我已经弄明白了,问题与类路径有关。显然,类路径与“Eclipse应用程序”的行为略有不同。我通过Class.getResource("/rsc/my_resource_file.txt")感谢BalusC解决了这个问题。

4 个答案:

答案 0 :(得分:8)

请退后一步。您的具体问题是资源返回null,对吧?你确定它的路径是正确的吗?就像你一样,它与当前类的包相关。路径不应该以{{1​​}}开头相对于包根目录吗?

/

或者,您也可以使用上下文类加载器,它始终相对于类路径(包)根目录:

URL resource = getClass().getResource("/rsc/my_resource_file.txt");
// ...

至少,Eclipse发射器不应该归咎于此。

答案 1 :(得分:3)

右键单击该项目并按照属性进行操作。

答案 2 :(得分:3)

将文件放在源树中的顶级目录中。这通常被称为“src”。 然后,在构建项目时,文件将被复制到您的类目录中(名称不同)。最后,post build文件将在你的classpath中(在eclipse环境中)。

Class someClassObject = BlammyClassName.class;
someClassObject.getResource("my_resource_file.txt");

将返回您资源的网址。

someClassObject.getResourceAsStream("my_resource_file.txt");

将返回一个流。

编辑:更改为静态不引用类方法。

答案 3 :(得分:0)

发生此问题是因为Manifest.MF中的Bundle-ClassPath设置必须包含。 (请参见https://www.eclipse.org/forums/index.php/t/287184/),例如:

Bundle-ClassPath: .,
 test.myapp.core

Bundle-ClassPath不会由插件向导自动添加,因此可能会导致一些问题。