我正在尝试通过 Mathematica 的 J/Link 获取 Java 方法。问题是该方法调用了一个 JNI(.dll 文件)。在命令行之外的 Mathematica 之外,一切都很好。但是在 Mathematica 中调用该方法,JVM 会返回以下内容:
Java::excptn: A Java exception occurred: java.lang.UnsatisfiedLinkError: ncsa.hdf.hdf5lib.H5.H5Fcreate(Ljava/lang/String;III)I
at ncsa.hdf.hdf5lib.H5.H5Fcreate(Native Method)
at ncsa.hdf.object.h5.H5File.createFile(H5File.java:920)
at H5FileCreateFromMathematica.H5FileCreate(H5FileCreateFromMathematica.java:38).
我花了很多时间试图通过各种排列的类路径和路径来正确处理所有事情。这可能仍然是问题,尽管我觉得我已经努力排除这些可能性。
任何关于 (1) 来自 Java 的消息的含义以及更好的 (2) 如何修复它的见解将不胜感激。
- 编辑:更多信息,在实施 Artefacto 非常有用的建议后 * Artefacto 输入的结果是错误消息的更改。在第一次调用时, fileFormat@create["C:\Test"] 产生:
Java::excptn: A Java exception occurred: java.lang.UnsatisfiedLinkError: Native Library C:\MyJava\hdf-java\lib\win\jhdf5.dll already loaded in another classloader
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1772)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at ncsa.hdf.hdf5lib.H5.<clinit>(H5.java:232)
at ncsa.hdf.object.h5.H5File.createFile(H5File.java:920)
at ncsa.hdf.object.FileFormat.create(FileFormat.java:1472).
再次立即调用, fileFormat@create["C:\Test"] 产生:
Java::excptn: A Java exception occurred: java.lang.NoClassDefFoundError: Could not initialize class ncsa.hdf.hdf5lib.H5
at ncsa.hdf.object.h5.H5File.createFile(H5File.java:920)
at ncsa.hdf.object.FileFormat.create(FileFormat.java:1472).
对解释这些变化有什么帮助,以及让它在 Mathematica 中工作可能意味着什么?