我想讓Matlab程序調用一個java文件,最好用一個例子。從MATLAB調用Java?
回答
好吧,我會盡量在這裏舉一個小例子。按照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 =
[email protected]
>> me.Add(10)
ans =
10
>> me.Add(10)
ans =
20
>> me.Add(10)
ans =
30
讓我知道如果我能的進一步幫助。
非常感謝!你的帖子非常有幫助。 – 2012-03-02 10:48:09
有三種情況需要考慮。
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;博士:一般的映射關係,你所期望的)
預編譯的* .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')
非常感謝。你的指導真的有幫助! – 2012-03-02 10:49:43
類沒有發現異常,儘管我已經添加了路徑 – zinking 2013-07-13 11:39:11
@zinking確保在編譯Java類時,您的目標是至少與您使用的MATLAB發行版一起提供的JRE版本。如果您的類文件比MATLAB的JRE支持的版本號更新,那麼它們將不會被加載,並且當您嘗試使用它們時會得到ClassNotFoundException。例如,R2006b附帶JRE5,因此您需要使用'javac --source 1.5 --target 1。5 <其他參數>'如果您使用JDK6或更新版本進行編譯。 – rob 2014-01-28 18:41:39
請閱讀文檔。 [使用MATLAB的Java庫](http://www.mathworks.ch/help/techdoc/matlab_external/f44062.html) – zellus 2012-03-01 17:03:20