1

새로운 프로젝트를 쉽게 시작할 수 있도록하기 위해 Eclipse에서 별도의 프로젝트에 정기적으로 사용하는 여러 클래스를 '고려했습니다'. 나는이 프로젝트를 All-In-One이라고 부른다. 그것은 종종 재사용하는 다양한 추상 클래스와 OpenGL 관련 메소드를 보유합니다. (올인원가 빌드 경로에 포함되어 있습니다)다른 프로젝트의 Eclipse 로딩 파일

내가 데 문제가 또 다른 프로젝트입니다

, 나는 그것을 테스트 프로젝트 전화 할게. 테스트 프로젝트에서 (All-In-One을 참조하여) SimpleShader 클래스의 인스턴스를 만들었지 만 런타임 중에 default.vert를 검색하고 찾지 못했습니다 (java.io.FileNotFoundException)

I ' 그것이 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");

자세한 내용은 Class.getResourceAsStream()에 대한 Api-Doc을 참조하십시오.