2012-03-22 6 views
4

Java 통합과 함께 Matlab을 사용 중이며 Java JAR 파일을 연결할 수 있으므로 Matlab에서 Java 객체를 만들고 메소드를 호출 할 수 있습니다. 문제는 자원에 있습니다. 예를 들어 JAR의 루트에 XML 파일이있는 경우 Java 응용 프로그램 내에서 성공적으로로드 할 수 있지만 Matlab에서는로드 할 수 없습니다.Matlab이 JAR 리소스를 읽지 못합니다.

누구나 JAR 파일 내의 MATLAB 액세스 리소스를 만드는 방법에 대한 아이디어가 있습니까?

감사합니다.

+0

이 라이브러리는 우연히 JNI 라이브러리에 의존합니까? 그런 다음 MATLAB과 함께 제공되는 기본 라이브러리가 포매터와 호환되는지 확인해야합니다. –

답변

0

일반적인 Java Class.getResource 메서드는 Matlab에서 호출 할 때 작동합니다. Java 및 Matlab에서 리소스를로드하려고 할 때 사용하는 구문은 무엇입니까? getResource을 사용하는 경우 자원을 보유하는 동일한 JAR에서로드 된 클래스에서 호출하고 있습니까?

Matlab에서 정적 및 동적 클래스 경로의 클래스는 다른 ClassLoader를 사용합니다. 동적 클래스 경로에있는 JAR의 자원은 정적 클래스 경로의 클래스에서 볼 수 없을 수도 있습니다. 따라서 JAR이 동적 클래스 경로에있는 경우 동일한 ClassLoader에서 제공된 클래스에서 getResource이 호출되도록해야합니다.

+0

Class.getResource()는 리소스를 설명하는 유효한 java.net.URL을 반환하지만 URL.openStream (MATLAB 내에서)을 호출하면 FileNotFoundException이 throw됩니다. – Clark

+0

약간 놀랍습니다. 나는 getResource()가 간단한 정적/동적 클래스 패스 불일치의 경우 null을 반환 할 것이라고 예상했지만, URL 객체가 있으면 openStream()이 작동합니다. 얻은 URL 문자열, FileNotFoundException의 정확한 오류 메시지, 그리고 가능하다면 정확한 Matlab 코드로 이러한 호출을하는 구체적인 예를 추가 할 수 있습니까? 또한 openStream() 호출을 분리하여 openConnection() 및 getInputStream() 호출을 분리하여 오류가 발생한 위치를 정확하게 확인할 수 있습니까? –

+0

오, 죄송합니다, 클락, 네가 OP가 될 줄 알았는데. 같은 상황을 재현하고 있습니까? –

1

jar 파일을 MATLAB의 동적 Java 클래스 경로에 추가하면 (예 : javaaddpath를 사용하여) jar 파일에 포함 된 리소스가 Java 코드에 표시되지 않습니다. 게시물 this에서 논의했듯이 MATLAB의 동적 클래스 경로에있는 항목은 실제로 JVM의 클래스 경로에 있지 않습니다. jar 파일의 리소스에 액세스하기 위해 jar 파일을 정적 클래스 경로에 추가했습니다. 이것은 MATLAB R2012b에서 사용중인 jar 파일 목록이 들어있는 MATLAB을 시작한 디렉토리에 javaclasspath.txt라는 파일을 생성하여 수행 할 수 있습니다. Relevant MATLAB documentation

관련 문제