Class.getResource()在我的Eclipse应用程序中返回null?无法配置类路径?

问题描述 投票:6回答:4

我正在尝试使用Class.getResource("rsc/my_resource_file.txt")在Eclipse应用程序中加载文件。但是,无论我在Eclipse中做什么,classpath始终仅包含Eclipse Launcher的一项:

... / eclipse / plugins / 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")返回空值。在一个简单的5行“ Java应用程序”中进行了一些小实验,我以为我已经搞清楚了,这个问题与类路径有关。显然,类路径的行为与“ Eclipse应用程序”有所不同。我通过执行Class.getResource("/rsc/my_resource_file.txt")感谢BalusC解决了问题。

java eclipse classpath
4个回答
8
投票

请退后一步。您的具体问题是资源返回null,对吗?您确定其路径正确吗?如您所愿,它是相对于当前类的包的。路径不应该以/开头相对于软件包根目录吗?

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

或者,您也可以使用上下文类加载器,它总是相对于类路径(包)的根:

ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL resource = loader.getResource("rsc/my_resource_file.txt");
// ...

至少,这里不怪Eclipse启动器。


3
投票

右键单击项目并遵循属性。


3
投票

将文件放在源代码树的顶级目录中。这通常称为“ src”。然后,在构建项目时,文件将被复制到类目录中(名称有所不同)。最后,构建后文件将位于您的类路径中(在Eclipse环境中)。

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

将返回一个URL到您的资源。

someClassObject.getResourceAsStream("my_resource_file.txt");

将返回一个流。

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


0
投票

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

Bundle-ClassPath: .,
 test.myapp.core

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

© www.soinside.com 2019 - 2024. All rights reserved.