2010-09-16 5 views
0

Я пытаюсь использовать пакет javabuilder от Matlab под Windows XP, но при попытке создать экземпляр любого класса javabuilder возникает странная ошибка. Чтобы проиллюстрировать эту проблему, я создал простую программу, которая печатает MCRROOT и PATH системные переменные (чтобы проверить, если они правильно установлены) и пытается создать MWCharArray:Matlab + Java: java.lang.ExceptionInInitializerError при попытке использовать javabuilder

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, но есть противоречивые результаты: некоторые источники говорят, что я должен включить версию dir, другие говорят наоборот. Кроме того, почему метод isInstalledMCR возвращает false? Я дважды проверил установку MCR (и даже удалил и установил ее, чтобы убедиться), так почему же библиотека не находит ее?

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

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

+1

Какую версию Matlab вы используете? –

+0

Я пытаюсь выполнить предварительно упакованный файл jar, построенный с помощью Matlab7.1, и установил время выполнения компилятора 7.1 (с MCRInstaller.exe) – PaoloVictor

ответ

0

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

Моя ошибка заключалась в том, что вместо того, чтобы указывать путь как путь к библиотекам в каталоге установки MCR (в моем случае, C:\MATLAB\MCR\v710\runtime\win32), я скопировал каталог времени выполнения в каталог моего проекта и использовал его. Похоже, что библиотека javabuilder использует переменную java.library.path догадка MCROOT, что объясняет странное «StringIndexOutOfBoundsException».

1

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

+0

Я удалил MCR и снова установил его в C: \ MATLAB \ MCR \ v710, но ошибка сохраняется ... спасибо за помощь, во всяком случае :-) – PaoloVictor

+0

Matlab сам может быть использован как «mcr». Может быть, вы попробуете еще раз. – zellus