2010-09-16 103 views
0

我一直試圖在Windows XP下使用Matlab的javabuilder包,但在嘗試實例化任何javabuilder類時出現奇怪的錯誤。爲了說明這個問題,我創建了一個簡單的程序,打印MCRROOT和PATH系統變量(以檢查他們是否正確設置),並嘗試創建一個MWCharArray:當我執行程序Matlab + Java:嘗試使用javabuilder時的java.lang.ExceptionInInitializerError

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的值是否正確?我試着找出如何設置MCRROOT的谷歌,但有矛盾的結果:一些消息來源說,我應該包括de版本目錄,其他人則說相反。另外,爲什麼isInstalledMCR方法返回false?我仔細檢查了MCR安裝(甚至是卸載並安裝它),爲什麼庫不能找到它?

在此先感謝您的幫助!

編輯:我也試過設置MCRROOT沒有版本字符串,它也失敗了。

+1

您使用的是什麼版本的Matlab? – 2010-09-17 14:50:59

+0

我試圖執行一個預先打包的jar文件,用Matlab7.1構建,並安裝了7.1編譯器運行時(使用MCRInstaller.exe) – PaoloVictor 2010-09-17 17:29:16

回答

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 2010-09-17 18:01:56

+0

Matlab本身也可以用作'mcr'。也許你再試一次。 – zellus 2010-09-17 21:50:43

相關問題