为了让新项目更容易开始,我已经将我经常使用的几个类分解为eclipse中的一个单独项目。我称这个项目为多功能一体机。它包含了我经常重用的各种抽象类和OpenGL相关的方法。
(All-In-One包含在构建路径中)
我遇到的问题是另一个项目,我称之为测试项目。我在测试项目中创建了一个SimpleShader类的实例(引用All-In-One),但是在运行时,它搜索default.vert并且找不到它(java.io.FileNotFoundException)
我猜它与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:
在为所有主要事项创建一个单独的项目之前,这个工作得很好。我希望这只是一些我不了解或理解的简单。
提前致谢。
答案 0 :(得分:0)
将项目放在构建路径上时,无法直接从文件系统访问其文件。引用的项目将构建为jar文件,生成的jar将放在构建路径上。因此,您必须从类路径加载您正在查找的资源,例如 InputStream stream = TestShader.class.getResourceAsStream(" path / to / resouce");
有关详细信息,请参阅Api-Doc for Class.getResourceAsStream()。
答案 1 :(得分:0)
根据Guenther的说法,我已经尝试过,但已经没有成功。我确实感到鼓舞,发现这很有效。
String filename = SimpleShader.class.getProtectionDomain().getCodeSource().getLocation().toExternalForm().substring(5)+filename;
输出与
类似的内容/workspace/All-In-One/bin/shdr/default.vert