MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   从Java调用时Matlab在库初始化时崩溃 (https://www.labfans.com/bbs/showthread.php?t=23374)

poster 2019-12-10 20:41

从Java调用时Matlab在库初始化时崩溃
 
我的设置是使用Java应用程序通过JNI调用本机C代码,这反过来又启动了MATLAB运行时并在其上调用函数(我知道还有其他解决方案可以从Java调用MATLAB方法)。

问题是在初始化过程中某个时刻MATLAB引擎崩溃了,我不知道到底是什么导致了它。崩溃导致我的jvm终止,我认为这是某种内存损坏。

实际崩溃的调用MATLAB函数的C ++代码是
[INDENT] JNIEXPORT void JNICALL some_jni_vodoo_initializeLibrary(JNIEnv* env, jclass thisClass) { try { if (!mclInitializeApplication(NULL, 0)) { THROW_EXCEPTION(env, "Could not initialize the application properly."); return; } if (!Initialize()) { THROW_EXCEPTION(env, "Could not initialize the library."); return; } } ... [/INDENT]函数Initialize()在此处崩溃,Java错误日志读取
[INDENT] Stack Trace: [0] jmi.dll:0x793f4175(0x7934cdca, 1, 0x7937e67c "脿;.y`[email protected] in C:\BUILD_ARE..", 0x792d6a32) [1] jvm.dll:0x792df9a5(0xc0000005, 0x79356791, 0x4961b400 "脨\8y", 0x6d8b29de) [2] jvm.dll:0x792e0431(0x8b515008, 0x70f0e8ce, 0x8b5ffffa, 0xc25d5ec6) ------------------------------------------------------------------------ Fatal Java Exception detected at Fri Apr 30 11:08:08 2010 ------------------------------------------------------------------------ Configuration: MATLAB Version: 7.8.0.347 (R2009a) MATLAB License: unknown Operating System: Microsoft Windows Vista Window System: Version 6.0 (Build 6002: Service Pack 2) Processor ID: x86 Family 6 Model 10 Stepping 5, GenuineIntel Virtual Machine: Java is not enabled Default Encoding: windows-1252 Java is not enabled [/INDENT]我真的不知道有什么问题。 jvm是否没有足够的内存?我想这个问题与Java有关,因为从一个简单的测试C ++程序调用JNI函数就可以了...

谢谢



[B]回答:[/B]

[B]最初的想法[/B]

我见过的唯一类似的事情是由于许可证无效而从MATLAB静默退出。

另一种可能性是嵌套的Java环境。由于MATLAB期望有自己的Java环境,所以这里可能存在一些问题。 [B]编辑:[/B]见下文!

您正在运行MATLAB引擎吗?还是使用某些“系统”或“ exec”调用来调用单独的MATLAB命令?这可能会提供一个很好的线索。

[B]回答[/B]

答案出现在下面的注释中。为了便于阅读,将其复制到此处:

在具有自己的JVM的进程中嵌套MATLAB引擎的调用时,您必须通过将-nojvm传递给mclInitializeApplication来告诉MATLAB在没有JVM的情况下运行,或者通过将全局MATLAB_JAVA设置为JVM的位置来告知要使用哪个JVM您要使用的C:\Program Files\Java\jre6 ,例如C:\Program Files\Java\jre6 。

第一个选项将禁用需要JVM的MATLAB中的任何功能,因此第二个选项更可取。



[url=https://stackoverflow.com/questions/2743566]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 01:21

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.