JNI загружает библиотеку более одного раза - PullRequest
2 голосов
/ 23 мая 2011

как упомянуто здесь Запретить загрузку библиотеки Java более одного раза библиотека загружается только один раз.

Теперь моя проблема в том, что я хочу загрузить один и тот же libray явно несколько раз. (Команда System.load делает то же самое, что и команда loadlibrary).

Есть идеи, какую команду я могу использовать или как я могу это сделать?

С наилучшими пожеланиями, Stefan

Ответы [ 2 ]

3 голосов
/ 23 мая 2011

Я почти уверен, что это не столько ограничение Java, сколько дизайн большинства операционных систем.По моему опыту, Windows / Linux / Solaris не позволяют загружать одну и ту же библиотеку более одного раза.Вам может понадобиться изменить C ++, который вы не хотите изменять.Если у вас нет контроля над этим кодом, вам, возможно, придется поработать над другим решением, включающим в себя выполнение / создание нового процесса для каждой копии библиотеки DLL, которую вы хотите загрузить, и связь через каналы / сокеты.

1 голос
/ 23 мая 2011

спасибо basszero за ответ, мне действительно нужно запускать новые процессы, если я хочу загрузить то же самое время многократного использования 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 ++, что, к сожалению, в моем случае невозможно.

С уважением, Stefan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...