#java #matlab #matlab-deployment
#java #matlab #matlab-развертывание
Вопрос:
Функция Matlab в оболочке Java: java
не удается загрузить / найти main
образец класса вызывающего
Я следую примеру MATLAB обертывания функции MATLAB в интерфейсе Java. Образец драйвера (т. Е. Вызывающего обернутую функцию) компилируется без ошибок или каких-либо сообщений, но java
сообщает, что не может найти / загрузить основной класс, т. Е. Образец драйвера.
Функция MATLAB, которую нужно обернуть, точно такая же, как на веб-странице (и фактически, она поставляется с установкой MATLAB):
" makesqr.m
"----------
function y = makesqr(x)
y = magic(x);
Образец вызывающего устройства чрезвычайно прост:
" makesqrSample1.m
"-----------------
% Sample script to demonstrate execution of function y = makesqr(x)
x = 3; % Initialize x here
y = makesqr(x);
Все в точности так, как показано на веб-странице. Я получаю все файлы, описанные в этой сводке файлов.
В разделе «Установка и реализация Java-приложения, созданного MATLAB«, все начинает отклоняться от ожидаемого. Шаг 3 ссылается на образец getmagic.java
вызывающего устройства вместо makesqrSample1.java
(автоматически генерируемого MATLAB makesqrSample1.m
сверху). Я предполагаю, что это опечатка.
При makesqr.jar
использовании и makesqrSample1.java
в том же (текущем рабочем) каталоге следующая компиляция не выдает сообщений или ошибок.
javac -cp
"makesqr.jar;C:Program FilesMATLABR2019atoolboxjavabuilderjarjavabuilder.jar"
makesqrSample1.java
Это создает makesqrSample1.class в той же папке. Вот ошибка при выполнении:
java -cp
"makesqr.jar;C:Program FilesMATLABR2019atoolboxjavabuilderjarjavabuilder.jar"
makesqrSample1
Error: Could not find or load main class makesqrSample1
Я проверил, что автоматически сгенерированный makesqrSample1.java имеет main
(см. ПРИЛОЖЕНИЕ ниже).
Это минимальный пример, точно следующий документации. Что является причиной main
того, что он не распознается?
КОНТЕКСТНЫЕ ДЕТАЛИ
Вывод версии (выберите подробности):
MATLAB Version: 9.6.0.1072779 (R2019a)
Operating System: Microsoft Windows 10 Pro Version 10.0 (Build 18362)
Java Version: Java 1.8.0_181-b13 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
MATLAB Compiler Version 7.0.1 (R2019a)
MATLAB Compiler SDK Version 6.6.1 (R2019a)
Установлен JDK:
C:Program FilesAdoptOpenJDKjdk-8.0.265.01-hotspot
Поскольку у меня установлен MATLAB, я не получил среду выполнения MATLAB (и, исходя из прошлого опыта, никогда не было ясно, как / используется ли среда выполнения при установке MATLAB). Проблема возникает прямо при поиске / загрузке main
.
ПРИЛОЖЕНИЕ: АВТОМАТИЧЕСКИ ГЕНЕРИРУЕТСЯ makesqrSample1.java
import com.mathworks.toolbox.javabuilder.*;
import makesqr.Class1;
/**
*
* Sample driver code that is integrated with a compiled MATLAB function
* generated by MATLAB Compiler SDK.
*
* Refer to the MATLAB Compiler SDK documentation for more
* information.
*
* @see com.mathworks.toolbox.javabuilder.MWArray
*
*/
public class makesqrSample1 {
private static Class1 class1Instance;
private static void setup() throws MWException {
class1Instance = new Class1();
}
/**
* Sample code for {@link Class1#makesqr(int, Object...)}.
*/
public static void makesqrExample() {
MWArray xIn = null;
MWNumericArray yOut = null;
Object[] results = null;
try {
double xInData = 3.0;
xIn = new MWNumericArray(xInData, MWClassID.DOUBLE);
results = class1Instance.makesqr(1, xIn);
if (results[0] instanceof MWNumericArray) {
yOut = (MWNumericArray) results[0];
}
System.out.println(yOut);
} catch (Exception e) {
e.printStackTrace();
} finally {
// Dispose of native resources
MWArray.disposeArray(xIn);
MWArray.disposeArray(results);
}
}
public static void main(String[] args) {
try {
setup();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
try {
makesqrExample();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
} finally {
// Dispose of native resources
class1Instance.dispose();
}
}
}
Ответ №1:
Этот ответ определенно для новичков Java. Путь к классу java
должен включать каталог .
недавно скомпилированного makesqrSample1.class
:
java -cp
"makesqr.jar;C:Program FilesMATLABR2019atoolboxjavabuilderjarjavabuilder.jar;."
makesqrSample1
Running C:cygwin64tmpUser.NamemcrCache9.6makesq0makesqrstartup
8 1 6
3 5 7
4 9 2
Что я нахожу странным, так это то, что это java
установка Windows, но, похоже, она распознает, что я вызываю ее из Cygwin, и создает рабочую папку C:cygwin64tmpUser.Name
.