Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我一直在尝试在Windows XP下使用Matlab的javabuilder包,但是在尝试实例化任何javabuilder类时却遇到了一个奇怪的错误。为了说明问题,我创建了一个简单的程序,该程序打印MCRROOT和PATH系统变量(以检查它们是否设置正确)并尝试创建MWCharArray:
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.(MCRConfiguration.java:51) at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getModuleDir(MCRConfiguration.java:56) at com.mathworks.toolbox.javabuilder.internal.MWMCR.(MWMCR.java:1447) at com.mathworks.toolbox.javabuilder.MWUtil.GetUnknownClassID(MWUtil.java:1258) at com.mathworks.toolbox.javabuilder.MWClassID.(MWClassID.java:41) at com.mathworks.toolbox.javabuilder.MWCharArray.(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.(MCRConfiguration.java:72) ... 8 more Java Result: 1 首先,MCRROOT和PATH的值正确吗?我曾尝试使用google来了解如何设置MCRROOT,但结果却存在冲突:有些消息来源说我应该包含de版本dir,而另一些消息则相反。另外,为什么isInstalledMCR方法返回false ?我已经仔细检查了MCR的安装(甚至可以肯定地卸载并安装了MCR),那么为什么磁带库找不到呢? 在此先感谢您的帮助! 编辑:我也尝试设置没有版本字符串的MCRROOT ,它也会失败。 回答: 我已经找到了解决方案,所以我发布了一个自我答案供以后参考:除了将javabuilder.jar添加到程序的类路径中,还必须将MCR运行时库的路径添加到java.library.path JDK中。参数。 我的错误是,我没有将路径设置为MCR安装目录(在我的情况下为C:\MATLAB\MCR\v710\runtime\win32 )中的库路径,而是将运行时目录复制到了项目的dir和改用它。似乎javabuilder库使用java.library.path变量猜测MCROOT ,这将解释奇怪的“ StringIndexOutOfBoundsException”。 更多&回答... |
![]() |
![]() |