Вызов функции Java из сценария Matlab
Я пытаюсь вызвать функцию Java из Matlab
Сценарий, я перепробовал все решения, размещенные на сайте, но у меня не возникло проблем. Мой класс прост:
package testMatlabInterface;
public class TestFunction
{
private double value;
public TestFunction()
{
value=0;
}
public double Add(double v)
{
value += v;
return value;
}
public static void main(String args[])
{
}
}
Итак, я положил .java
файл (также .class
) в моем рабочем пространстве C:\scriptsMatlab
и я добавил этот путь к javaclasspath
Matlab, но когда я пытаюсь вызвать функцию, он говорит мне, что нет класса с этим именем в javaclasspath
из Matlab
,
РЕДАКТИРОВАТЬ: Вот версия Java, которую использует Matlab:
Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) Client VM mixed mode
И это версия на JDK, которую я использовал для компиляции моего класса:
Но когда я пытаюсь выполнить этот командир из Matlab
>> javaaddpath 'C:\scriptsMatlab'
>> obj = TestFunction
это говорит мне:
Undefined function or variable 'TestFunction'.
1 ответ
Опция 1
Проверьте, используется ли тот же JRE/JDK для компиляции вашего файла JAVA. Выполнить на Matlab:
version -java
Скомпилируйте MyFunction.java с тем же jdk, что и выше, и найдите MyFunction.class.
Найдите свой Matlab classpath.txt. Введите следующий в Matlab cmd.
which classpath.txt
Откройте ваш classpath.txt как администратор. Добавьте полный путь к каталогу с MyFunction.class в конец файла "classpath.txt" в одну строку и сохраните файл.
Перезапустите Matlab.
Бежать в Матлаб. Создать объект MyFunction.
obj = MyFunction
Запустить метод main() в matlab.
javaMethod('main', obj, '')
Вариант 2
Выполните шаги 1-2.
Выполните следующую команду в Matlab
JAVAADDPATH PATH/to/Directoryof MyFunction.class
,
Нет необходимости перезапускать Matlab здесь. Просто беги, используя
obj = MyFunction;
javaMethod('main', obj);
Из MathWorks:
javaMethod (MethodName, JavaObj, x1,..., xN) вызывает метод в классе массива объектов Java® с сигнатурой, соответствующей аргументам x1,..., xN.
javaMethod (StaticMethodName, ClassName, x1,..., xN) вызывает статический метод в классе ClassName.