MatLab + Java: Java.lang.ExceptionInInitializerError, когда пытаясь использовать Javabuilder

StackOverflow https://stackoverflow.com/questions/3731727

  •  03-10-2019
  •  | 
  •  

Вопрос

Я пытался использовать пакет JavaBuder Matlab под Windows XP, но я получаю странную ошибку при попытке создать экземпляр любого класса Javabuilder. Чтобы проиллюстрировать проблему, я создал простую программу, которая печатает системные переменные MCRROOT и PATH (чтобы проверить, правильно ли настроены) и пытается создать MWCORARRAY:

import com.mathworks.toolbox.javabuilder.*;
import com.mathworks.toolbox.javabuilder.internal.MCRConfiguration;

class Main
{
   public static void main(String[] args)
   {
       System.out.println("MCRROOT: " + System.getenv("MCRROOT"));
       System.out.println("PATH: " + System.getenv("PATH"));
       System.out.println(MCRConfiguration.isInstalledMCR());
       MWCharArray test = new MWCharArray("Test");
   }
}

Когда я выполняю программу, вывод:

MCRROOT: C:\Program files\MATLAB\MATLAB Compiler Runtime\v710
PATH: C:\Program files\CollabNet Subversion Client;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program files\MATLAB\MATLAB Compiler Runtime\v710
false
Exception in thread "main" java.lang.ExceptionInInitializerError
        at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getMCRRoot(MCRConfiguration.java:77)
        at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ModuleDir.<clinit>(MCRConfiguration.java:51)
        at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getModuleDir(MCRConfiguration.java:56)
        at com.mathworks.toolbox.javabuilder.internal.MWMCR.<clinit>(MWMCR.java:1447)
        at com.mathworks.toolbox.javabuilder.MWUtil.GetUnknownClassID(MWUtil.java:1258)
        at com.mathworks.toolbox.javabuilder.MWClassID.<clinit>(MWClassID.java:41)
        at com.mathworks.toolbox.javabuilder.MWCharArray.<init>(MWCharArray.java:75)
        at Main.main(Main.java:11)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
        at java.lang.String.substring(String.java:1937)
        at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$MCRRoot.get(MCRConfiguration.java:70)
        at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$MCRRoot.<clinit>(MCRConfiguration.java:72)
        ... 8 more
Java Result: 1

Прежде всего, нужны ли значения Mcrroot и PATH? Я пробовал Google за узнать, как установить MCRROOT, но есть противоречивые результаты: некоторые источники говорят, что я должен включить de версию dir, другие говорят обратное. Кроме того, почему isInstalledMCR Подтверждение метода false? Я дважды проверил установку MCR (и даже удалить и установить его, чтобы быть уверенным), так почему же библиотека не находит его?

Спасибо заранее за любую помощь!

Редактировать: Я также пробовал настроить MCRROOT без строки версии, а также не удается.

Это было полезно?

Решение 2

Я нашел решение, поэтому я публикую ответ на будущее для дальнейшего использования: помимо добавления Javabuilder.jar в классную трасс программы, вам также необходимо добавить путь к библиотекам времени выполнения MCR к java.library.path Параметр JDK.

Моя ошибка была то, что вместо того, чтобы установить путь в качестве пути к библиотекам в каталоге установки MCR (в моем случае, C:\MATLAB\MCR\v710\runtime\win32), Я скопировал каталог Runtime для DIR проекта и вместо этого использовал его. Кажется, что библиотека Javabuilder использует java.library.path переменная угадай MCROOT, что бы объяснить странную «StringindexoutOfBoundsexception».

Другие советы

Просто дикое угадание! Java водит с строками, в то время как ваша «MCRROOT» содержит белые пробелы. Я мог бы изменить путь установки MCR к чему-то вроде C: matlab matlabcompilrruntime v710, пропуская любые белые пробелы и специальные символы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top