2012-03-22 83 views
4

我正在使用Matlab与Java集成,并且能够链接Java JAR文件,使我能够在Matlab中创建Java对象和调用方法。问题在于资源。例如,如果我有一个位于JAR根目录的XML文件,我可以从Java应用程序中成功加载它,但不能从Matlab加载它。Matlab无法读取JAR资源

有没有人有关于如何在JAR文件中制作Matlab访问资源的想法?

谢谢。

+0

这些库是否依赖于JNI库?然后你必须确保MATLAB附带的本地库与前者兼容。 – 2012-03-23 15:36:40

回答

0

正常的Java Class.getResource方法应该从Matlab调用时工作。你用什么语法来尝试在Java和Matlab中加载资源?如果使用getResource,您是否在从包含资源的相同JAR加载的类上调用它?

在Matlab中,静态和动态类路径上的类使用不同的ClassLoaders。动态类路径上的JAR中的资源可能对静态类路径中的类不可见。因此,如果您的JAR位于动态类路径上,则需要确保在来自同一ClassLoader的类上调用getResource

+0

Class.getResource()返回一个描述资源的有效的java.net.URL,但随后调用URL.openStream(在MATLAB内)抛出FileNotFoundException – Clark 2012-12-21 12:09:35

+0

这有点令人惊讶;我期望getResource()在我谈论的简单静态/动态类路径不匹配的情况下返回null,但是如果你有一个URL对象,那么openStream()就可以工作。你可以添加一个具体的例子,用你得到的URL字符串,那个FileNotFoundException的确切错误信息,如果可能的话,准确的Matlab代码使这些调用?你是否也可以尝试打开openStream()调用来分开openConnection()和getInputStream()调用来查看错误发生的位置? – 2012-12-23 06:27:57

+0

哦,对不起克拉克,我以为你是OP留言。你有相同的情况的repro? – 2012-12-23 06:32:52

1

如果您将一个jar文件添加到MATLAB的动态java类路径(例如使用javaaddpath),那么包含在jar中的资源将不会被任何java代码看到。正如this文章中所讨论的那样,MATLAB的动态类路径上的项目并不在JVM的类路径中。为了访问我的jar文件中的资源,我使用了将jar添加到静态类路径中的方法。这可以在MATLAB R2012b中完成,方法是在您启动MATLAB的目录中创建一个名为javaclasspath.txt的文件,其中包含您正在使用的jar文件的列表。 Relevant MATLAB documentation