1

为了让新项目更容易启动,我将几个定期使用的类放到了eclipse中的一个单独项目中。我称这个项目为All-In-One。它拥有我经常重用的各种抽象类和OpenGL相关方法。来自不同项目的Eclipse加载文件

(包括在构建路径全合一)

我遇到的问题是另外一个项目,我会打电话给它的测试项目。我在测试项目中创建了一个SimpleShader类的实例(引用了All-In-One),但是在运行时,它搜索了default.vert并且没有找到它(java.io.FileNotFoundException)

I' m猜测它与Parent Project不知道shdr文件夹及其内容有关;或者看到该类是在测试项目中“创建”的,它不会查看All-In-One的src文件夹。我试过将文件夹链接到测试项目中的shdr文件夹,但没有任何更改。

All-In-One Project 
    src/ 
     SimpleShader.java 
     shdr/ 
      default.vert 
      .... other files 
Test Project 
    src/ 
     Here would be the main file that creates an instance of 
     SimpleShader, which then looks for default.vert (but can't find it) 

我加载这个

String filename = "shdr/default.vert"; // It's actualy passed via a parameter, but this works. 
FileInputStream in = new FileInputStream(filename); // Boom java.io.FileNotFoundException: 

文件的所有主要的东西创建一个单独的项目之前,这个工作就好了。我希望这只是我不了解或理解的简单事情。

在此先感谢。

+1

如何构建路径是什么样子?为什么不使用适当版本的一体机作为jar库? – Gildraths

回答

0

建立在Guenther说的基础上,我已经尝试过,但没有成功。我确实感受到了灵感,发现这很有效。

String filename = SimpleShader.class.getProtectionDomain().getCodeSource().getLocation().toExternalForm().substring(5)+filename; 

输出财产以后类同

/workspace/All-In-One/bin/shdr/default.vert 
0

将项目放在构建路径上时,无法直接从文件系统访问它们的文件。被引用的项目将被构建为一个jar文件,并将生成的jar放在构建路径中。因此,您必须从类路径中加载您正在查找的资源,例如InputStream stream = TestShader.class.getResourceAsStream(“path/to/resouce”);

有关更多信息,请参阅Api-Doc for Class.getResourceAsStream()。

相关问题