我的System.load和java的System.loadLibrary有问题(我试过了)。我搜索了很多关于他们的信息,但可以找到解决我确切问题的方法。我有一个需要调用一些.Net程序集的java程序。出于这个原因,我们构建了一个包含互操作性的应用程序。这是从左到右的工作流程:Java - JNI - C ++ \ CLI - C#
问题出在我的Java代码中。当我将所有依赖的DLL复制到Java安装文件夹(ProgramFiles \ Java \ bin)时,程序运行成功。从Java \ bin运行时一切都很好,我们到达.Net程序集。但是,这不是一个可接受的解决方案。 Java \ bin用于Java自己的二进制文件目录,我们需要从另一个目录运行它。 这是Java代码部分:
static{
System.out.print("Library(java.library.path):");
System.out.print("\n GetProperty \n");
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("AudioProcessingAgent");
}
public static void main(String[] args) {
CsharpConsumer nc = new CsharpConsumer();
nc.registerAssemblyHandler(".\\");
…
// Sample code of registerAssemblyHandler from this directory: http://codefry.blogspot.jp/2012/01/calling-net-dlls-from-java-code-without.html?m=1
}
我确保我的目录包含在我的PATH和java.library.path中 我找到了另一个问题的解决方法,如果我编译我的java并将我的jar文件转换为Exe文件,这也可以从exe和dll所在的路径中正常工作。但是,这也是不可接受的,因为我们需要将它嵌入到java applet中。因此,我需要理解为什么system.load和system.loadLibrary失败了java \ bin。 我从外面运行时遇到了这个错误:
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (0xe0434352), pid=10840, tid=9208
#
# JRE version: Java(TM) SE Runtime Environment (7.0_79-b15) (build 1.7.0_79-b15)
# Java VM: Java HotSpot(TM) Client VM (24.79-b02 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [KERNELBASE.dll+0xc54f]
#
# Failed to write core dump. Minidumps are not enabled by default on client vers ions of Windows
我也读到了这个错误。这就是我添加功能的原因" registerAssemblyHandler"它帮助从java \ bin运行它。