我希望Matlab程序调用一个java文件,最好是一个例子。
答案 0 :(得分:29)
有三种情况需要考虑。
Java内置库。
即,here所描述的任何内容。这些项目可以直接调用。例如:
map = java.util.HashMap;
map.put(1,10);
map.put(2,30);
map.get(1) %returns 10
唯一的复杂因素是Matlab在Matlab数据类型和Java数据类型之间执行的映射。这些映射描述为here (Matlab to Java)和here (Java to Matlab)。 (tl; dr:通常映射是你想象的那样)
预编译* .jar文件
首先需要将这些添加到Matlab的java类路径中。您可以动态执行此操作(即,每个Matlab会话,没有必需的Matlab状态),如下所示:
javaaddpath('c:\full\path\to\compiledjarfile.jar')
您还可以通过编辑classpath.txt文件来静态添加这些文件。有关更多信息,请使用docsearch java class path
。
预编译* .class文件。
这些类似于* .jar文件,除了您需要添加包含类文件的目录,而不是类文件本身。例如:
javaaddpath('c:\full\path\to\directory\containing\class\files\')
%NOT THIS: javaaddpath('c:\full\path\to\directory\containing\class\files\classname.class')
答案 1 :(得分:24)
好的,我会尝试在这里给出一个小例子。可以像在zellus建议的那样使用Matlab窗口中的java函数,或者,如果需要,可以创建自己的java类。这是一个例子:
package testMatlabInterface;
public class TestFunction
{
private double value;
public TestFunction()
{
value = 0;
}
public double Add(double v)
{
value += v;
return value;
}
}
然后将其转换为jar文件。假设您将文件放在名为testMatlabInterface
的文件夹中,请在命令行运行此命令:
jar cvf testMatlab.jar testMatlabInterface
然后,在Matlab中,导航到testMatlab.jar
文件所在的目录并运行命令import testMatlabInterface.*
以导入testMatlabInterface
包中的所有类。然后你可以像这样使用这个类:
>> methodsview testMatlabInterface.TestFunction
>> me = testMatlabInterface.TestFunction()
me =
testMatlabInterface.TestFunction@7e413c
>> me.Add(10)
ans =
10
>> me.Add(10)
ans =
20
>> me.Add(10)
ans =
30
如果我能得到进一步帮助,请告诉我。