从MATLAB调用Java?

我希望Matlab程序调用一个java文件,最好是一个例子。

好吧,我会尽量在这里举一个小例子。 按照zellus的build议,在Matlab窗口中使用Java函数,或者,如果需要,可以创build自己的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 

让我知道,如果我能得到进一步的援助。

有三种情况需要考虑。

  1. Java内置库。

    就是这里所描述的任何东西。 这些项目可以直接调用。 例如:

     map = java.util.HashMap; map.put(1,10); map.put(2,30); map.get(1) %returns 10 

    唯一的麻烦是Matlab在Matlab数据types和Java数据types之间进行映射。 这些映射在这里描述(Matlab到Java)和在这里(Java到Matlab) 。 (tl; dr:通常映射如你所期望的那样)

  2. 预编译* .jar文件

    您首先需要将这些添加到Matlab的Java类path。 你可以dynamic地执行这个操作(即每个Matlab会话,不需要Matlab状态),如下所示:

     javaaddpath('c:\full\path\to\compiledjarfile.jar') 

    您也可以通过编辑classpath.txt文件来静态添加这些文件。 有关更多信息,请使用docsearch java class path

  3. 预编译的* .class文件。

    这些类似于* .jar文件,除了需要添加包含类文件的目录,而不是类文件本身。 例如:

     javaaddpath('c:\full\path\to\directory\containing\class\files\') %NOT THIS: javaaddpath('c:\full\path\to\directory\containing\class\files\classname.class')