2012-03-01 2 views
15

Я хочу, чтобы программа Matlab вызывала java-файл, предпочтительно с примером.Вызов Java из MATLAB?

+10

пожалуйста, прочитайте документацию. [Использование библиотек Java из MATLAB] (http://www.mathworks.ch/help/techdoc/matlab_external/f44062.html) – zellus

ответ

23

Хорошо, я попытаюсь привести здесь мини-пример. Либо используйте java-функции прямо из окна Matlab, как предлагает zellus, либо, если это необходимо, создайте свой собственный класс 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 

Сообщите мне, если я смогу оказать дополнительную помощь.

+0

Большое спасибо! Ваш пост был очень полезен. –

28

Существует три случая рассмотрения.

  1. 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; др: обычно отображения являются как и следовало ожидать)

  2. Предкомпилированных * .jar файлов

    Сначала нужно добавить их в классе Java пути от Matlab. Вы можете сделать это динамически (то есть, за 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') 
    
+0

Большое спасибо. Ваше руководство действительно помогло! –

+0

класс не найден исключение, хотя я добавил путь – zinking

+1

@zinking убедитесь, что при компиляции ваших классов Java вы ориентируетесь на версию JRE, по крайней мере такую ​​же старую, как и та, которая поставляется с выпуском MATLAB, который вы используете. Если ваши файлы классов имеют более новый номер версии, чем тот, который поддерживается JRE MATLAB, они не будут загружены, и вы получите исключение ClassNotFoundException при попытке использовать их. Например, R2006b поставляется с JRE5, поэтому вам нужно использовать 'javac -source 1.5 --target 1.5 <другие аргументы> ', если вы компилируете JDK6 или новее. – rob