Собственный доступ к Java в JDK 1.3

#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. Наследие, вы знаете.