【问题标题】:Class.getResource() returns null in my Eclipse Application? Can't configure classpath?Class.getResource() 在我的 Eclipse 应用程序中返回 null?无法配置类路径?
【发布时间】:2011-11-27 23:21:22
【问题描述】:

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

.../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") 返回 null。在一个简单的 5 行“Java 应用程序”中做了一些小实验后,我想我已经弄清楚了,问题与类路径有关。显然,类路径的行为与“Eclipse 应用程序”略有不同。我通过 Class.getResource("/rsc/my_resource_file.txt")Thanks BalusC 解决了这个问题。

【问题讨论】:

  • 你能退一步吗?您的具体问题是资源返回null,对吗?你确定它的路径是对的吗?正如您所拥有的,它与当前类的包相关。路径不应该以/ 开头以相对于包根目录吗?至少,Eclipse 启动器不应该归咎于此。
  • @BalusC - 你是对的,我原以为 / 将是文件系统上的绝对路径。如果您给出这个答案,我会接受。
  • 我发布了一个答案。类路径不能与本地磁盘文件系统混淆。
  • 我遇到了类似的问题。我基本上创建了一个指向另一个项目的链接,该链接已添加到类路径中。然后我输入“projectname/resourceFile.txt”而不是“resourceFile.txt”。哎呀。

标签: java eclipse classpath


【解决方案1】:

请退后一步。您的具体问题是资源返回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 启动器不应该归咎于此。

【讨论】:

    【解决方案2】:

    右键单击项目并按照属性。

    【讨论】:

    • 我遇到了同样的问题,这是因为我在类路径中包含了根目录。
    【解决方案3】:

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

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

    将返回一个指向您的资源的 URL。

    someClassObject.getResourceAsStream("my_resource_file.txt");
    

    将返回一个流。

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

    【讨论】:

    • 那些方法不是static。即便如此,它也无法解决 OP 使用上下文相关相对路径的具体问题。
    • 我发现这是在早期测试中的有效解决方法,但我不应该将资源文件放在我的 src 文件夹中。相反,我将资源文件夹/文件添加到构建路径中。
    【解决方案4】:

    我遇到过这个问题,因为 Manifest.MF 中的 Bundle-ClassPath 设置必须包含 . (见https://www.eclipse.org/forums/index.php/t/287184/),例如:

    Bundle-ClassPath: .,
     test.myapp.core
    

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

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 2013-03-12
      • 2012-01-13
      • 2013-07-02
      • 1970-01-01
      相关资源
      最近更新 更多