Функция Matlab в оболочке Java: «java» не может загрузить / найти `основной` образец класса вызывающего

#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 .