英文:
Calling matlab from java, java.lang.UnsatisfiedLinkError
问题
我正在尝试从Java(在Eclipse中开发)调用我拥有的Matlab函数。我可以在R2019b中成功运行它,但是当我将Java构建路径更改为R2019a(engine.jar - C:\Program Files\MATLAB\R2019a\extern\engines\java\jar)时,出现错误:
Caused by: java.lang.UnsatisfiedLinkError: com.mathworks.mvm.MvmFactory.nativeSetJavaEngine(Z)V
at com.mathworks.mvm.MvmFactory.nativeSetJavaEngine(Native Method)
at com.mathworks.mvm.MvmImpl.setJavaEngineMode(MvmImpl.java:203)
at com.mathworks.engine.MatlabEngine.<clinit>(MatlabEngine.java:69)
at MyController.onRunSimClick(MyController.java:190)
... 62 more
我已将C:\Program Files\MATLAB\R2019b\bin\win64和C:\Program Files\MATLAB\R2019a\bin\win64都添加到我的PATH变量中。
堆栈跟踪的开始部分是:
java.lang.NoSuchMethodError: Method com.mathworks.mvm.MvmFactory.nativeCreateFactory(IIZ[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)J not found
我愿意提供剩下的部分,但不想创建混乱。提前感谢!
英文:
I am trying to call a matlab function I have from java (developing in Eclipse). I can get it to run just fine with R2019b, but when I change the java build path to R2019a (engine.jar - C:\Program Files\MATLAB\R2019a\extern\engines\java\jar), I get an error:
Caused by: java.lang.UnsatisfiedLinkError: com.mathworks.mvm.MvmFactory.nativeSetJavaEngine(Z)V
at com.mathworks.mvm.MvmFactory.nativeSetJavaEngine(Native Method)
at com.mathworks.mvm.MvmImpl.setJavaEngineMode(MvmImpl.java:203)
at com.mathworks.engine.MatlabEngine.<clinit>(MatlabEngine.java:69)
at MyController.onRunSimClick(MyController.java:190)
... 62 more
I have added both C:\Program Files\MATLAB\R2019b\bin\win64 and C:\Program Files\MATLAB\R2019a\bin\win64 to my PATH variable.
The start of the stack trace is:
java.lang.NoSuchMethodError: Method com.mathworks.mvm.MvmFactory.nativeCreateFactory(IIZ[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)J not found
I am happy to provide the rest, but don't want to create clutter. Thanks in advance!
答案1
得分: 0
我不能评论,所以将这个作为一个答案。你可能想要做的第一件事是运行:
java -XshowSettings:properties -version
以查看你的java.library.path是什么。
英文:
I cannot comment yet, so putting this in as an answer. The first thing you might want to do is run:
java -XshowSettings:properties -version
to see what your java.library.path is.
答案2
得分: 0
我找到了一个解决方法,我只需要从命令行编译和运行我的代码。在任何其他Matlab版本之前,我必须将C:\Program Files\MATLAB\R2019a\bin\win64;添加到我的路径中。然后,根据Matlab文档,我可以这样做:
> javac -classpath matlabroot\extern\engines\java\jar\engine.jar MyJavaCode.java
> java -classpath .;matlabroot\extern\engines\java\jar\engine.jar MyJavaCode
我仍然不确定为什么这在Eclipse中无法工作,但这个解决方法将在短期内起作用。
英文:
I found a workaround, where I can just compile and run my code from the command line. I had to add C:\Program Files\MATLAB\R2019a\bin\win64; to my path before any other matlab version. Then, as per the matlab documentation I could just do:
> javac -classpath matlabroot\extern\engines\java\jar\engine.jar MyJavaCode.java
> java -classpath .;matlabroot\extern\engines\java\jar\engine.jar MyJavaCode
I'm still not sure why this wouldn't work in Eclipse, but this workaround will work for the short term.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论