#java #dll #nio #jna
#java #dll #nio #jna
Вопрос:
Я пытаюсь интегрировать JNA в приложение JDK 1.3. На страницах JNA есть следующее по этому вопросу:
Поддерживается на JVM версии 1.4 или более поздней (более ранние виртуальные машины могут работать с заглушенной поддержкой NIO)
Мне удалось перенести исходные тексты JNA в JDK 1.3, удалив все ссылки java.nio. Мне не нужен, например, java.nio.Buffer.
Однако библиотеки DLL JNA компилируются для использования типов Java NIO и постоянно жалуются:
JNA: Проблемы с загрузкой идентификаторов ядра: java.nio.Buffer
Что мне нужно сделать, чтобы заставить JNA работать в JDK 1.3? Что означает это «может работать с отключенной поддержкой NIO»?
Является ли мой единственный вариант заглушить NIO из исходного кода C и перекомпилировать DLL? Поскольку я совсем не силен в программировании на C, я отчаянно пытаюсь избежать этого.
Есть ли какой-либо другой способ вызвать собственную DLL в Java (не JNI, вызываемые DLL имеют закрытый исходный код и несовместимы с JNI).
Комментарии:
1. Интересно, подразумевается ли под заглушенной поддержкой NIO просто создание ваших собственных классов java.nio с заглушками методов для методов класса NIO, которые необходимы компилятору (методы, которые, конечно, вы не можете использовать). Я сомневаюсь, что вам нужно писать код на C для этого.
Ответ №1:
В документах предлагается написать несколько поддельных java.nio
классов и поместить их в bootclasspath
— и затем не использовать ничего, что требует java.nio
. От вас не требуется изменять исходный код JNA или редактировать собственный код.
Комментарии:
1. Поддержано. В дополнение к этому ответу — вам, вероятно, не нужно изменять какой-либо собственный код c. либо сделайте то, что предлагает этот ответ, либо попробуйте использовать эту версию JNA java.net/jira/browse/JNA-108 . Автор удалил NIO, поэтому вам не нужно.
Ответ №2:
JDK 1.3? Это смехотворно не поддерживается, если только вы не работаете на Solaris 8. EOL запущен семь лет назад и был завершен, когда 6 ноября 2006 года стал доступен JDK 6. Это было почти пять лет назад.
Лично я думаю, что ваши усилия были бы лучше потрачены на перенос кода на более современный JDK. JNA сообщает вам, что для этого требуется NIO. Я бы прислушался к вызову и перенес его из JDK 1.3.
Комментарии:
1. API коллекций был представлен в JDK 1.2 .
2. Не версия с дженериками. Это не меняет сути. Вы выступаете за то, чтобы придерживаться JDK 1.3? Я думаю, что это безумие.
3. Я предполагаю, что у него есть какая-то причина использовать 1.3 — возможно, как вы говорите, для запуска на Solaris 8 или какой-то другой старой ОС. В любом случае, вы не сказали, что в 1.3 нет дженериков, вы сказали, что в нем нет коллекций, что определенно так и есть.
4. Я понял, EFH. Вы абсолютно правы, и ваш голос «против» оправдан. У меня с этим нет проблем. Как вы можете видеть, я отредактировал свой неправильный ответ, чтобы усилить вашу точку зрения. Но остальное все еще остается в силе.
5. Все это предназначено для запуска в Oracle JInitator на тонком клиенте Forms 6i. Наследие, вы знаете.