Из javadoc для класса UnsatisfiedLinkError
...
Брошенный, если Виртуальная машина Java не может найти соответствующее определение на родном языке метода, объявленного собственным.
Это означает, что функция Java_com_printer_test_JniPrinterStatus_GetStatus
не найдена.
Метод loadLibrary
в классе java.lang.System
обычно выполняет поиск в каталогах, перечисленных в свойстве [System] "java.library.дорожка".Для машин Windows значение этого свойства обычно является значением переменной среды PATH.
Поэтому я предлагаю распечатать значение этого свойства в вашем коде, чтобы увидеть, включает ли оно каталог, содержащий вашу DLL.Если этого не произойдет, вам нужно будет это исправить, либо переместив DLL, либо изменив переменную среды PATH, либо запустив Java-программу с опцией -Djava.library.path=...
.После этого вам нужно проверить подпись нативного метода. Dependency Walker - это инструмент, который я использую для своей работы.
РЕДАКТИРОВАТЬ Перечитав ваш вопрос, я чувствую, что не совсем точно ответил на ваш вопрос,поэтому позвольте мне добавить ...
Поведение по умолчанию Eclipse заключается в копировании файлов ресурсов, таких как DLL, в выходную папку.Поэтому, если вы поместите свою DLL в папку src\com\printer\test
, она получит копию в папку bin\com\printer\test
.Я предполагаю, что текущий рабочий каталог, то есть .
, находится в вашем "java.library.path", поэтому он работает, когда ваш код Java находится в пакете по умолчанию.