Java JNI多次加载库

Java JNI多次加载库,java,java-native-interface,Java,Java Native Interface,如前所述 一个库只加载一次 现在我的问题是,我想多次明确地加载同一个库。(System.load命令的作用与loadlibrary命令相同) 你知道我可以使用哪个命令吗,或者我怎么做 致以最良好的祝愿, Stefan我非常确定,这与其说是Java的限制,不如说是大多数操作系统的设计。根据我的经验,Windows/Linux/Solaris不允许多次加载同一个库。您可能需要修改不希望修改的C++。如果您无法控制该代码,则可能必须使用不同的解决方案,包括为要加载的DLL的每个副本执行/生成一个新进程

如前所述 一个库只加载一次

现在我的问题是,我想多次明确地加载同一个库。(System.load命令的作用与loadlibrary命令相同)

你知道我可以使用哪个命令吗,或者我怎么做

致以最良好的祝愿,
Stefan

我非常确定,这与其说是Java的限制,不如说是大多数操作系统的设计。根据我的经验,Windows/Linux/Solaris不允许多次加载同一个库。您可能需要修改不希望修改的C++。如果您无法控制该代码,则可能必须使用不同的解决方案,包括为要加载的DLL的每个副本执行/生成一个新进程,并通过管道/套接字进行通信。

感谢basszero的回答,如果要多次加载相同的DLL,我确实必须启动新进程。我现在这样做的方法是

  • 跨越新流程的一个主要类
  • 加载DLL的一个类
实现这一点的技术是ProcessBuilder。下面是一个小的编码示例:

ProcessBuilder pb = new ProcessBuilder( "java", "Mainclass");
String filepath = "C:\\{..}\\bin\\";
File directory = new File(filepath);
pb.directory(directory);
try {
    Process p = pb.start();
    p.waitFor();
    InputStream is =  p.getInputStream();
    int c;
    while((c = is.read()) != -1){
        sb.append((char)c);
    }
} catch (Exception e) {
    e.printStackTrace();
}
这当然是工作分配,因为我必须在进程之间交换对象,同步它们,等等-(

如果任何人看到这个例子,我会建议他编辑他的C++,这在我的情况下是不可能的。< /P> 问候,,
斯特凡< /P>你能解释一下为什么你想一次加载它,你希望它加载一次的效果如何?我可以,但是这没什么大帮助。基本上每个图书馆都有自己的一组对象,它应该存储……而且我不能真正改变C++代码到漫画,我真的必须加载相同的库。一次!!!如果这听起来很粗鲁,我很抱歉…:(,但是dll被设计得很小,可以加载多次,所以loadLibrary只加载一次真的是个问题………不,不粗鲁,别担心。我认为你在这里面临着死胡同。据我所知,库被加载到类加载器的一个实例,所以除非你能对类加载做一些复杂的事情,否则我不会查看java层中的解决方案。