JNI不止一次加载库

时间:2011-05-23 09:39:02

标签: java java-native-interface

如此处所述 Prevent Java from loading library more than once 一个库只能加载一次。

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

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

最诚挚的问候, 斯蒂芬

2 个答案:

答案 0 :(得分:3)

我很确定这不是Java限制,而是大多数操作系统的设计。根据我的经验,Windows / Linux / Solaris不允许多次加载同一个库。您可能需要修改不想修改的C ++。如果您无法控制该代码,则可能需要处理另一个解决方案,该解决方案涉及为要加载并通过管道/套接字进行通信的DLL的每个副本执行/生成新进程。

答案 1 :(得分:1)

感谢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 ++,这在我的案例中是不可能的。

此致 斯蒂芬