java.lang.UnsatisfiedLinkError: нет rxtxSerial в java.library.path
Я пытаюсь использовать 64-битную библиотеку последовательной связи rxtx (загруженную из cloudhopper) с 64-битной Windows 7 и Eclipse. Я получаю сообщение:java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
, DLL находятся в /jre/lib
реж, а также Windows/System32
, RXTXcomm.jar
находится в пути сборки для затмения, а также в jre/lib/ext
реж. Я запустил монитор процесса в фоновом режиме и вижу, что RXTXcomm.jar
, rxtxSerial.dll
, а также rxtxParallel.dll
все найдены и были открыты, поэтому мне неясно, почему эта проблема возникает.
Какие-либо предложения.
11 ответов
Перейдите в Проект -> Свойства -> Путь сборки Java -> Найдите свой.jar. Нажмите +, чтобы открыть свойства JAR. Выберите расположение нативной библиотеки и измените его так, чтобы он указывал на общую библиотеку RXTX (.DLL, .so, .dylib).
Вы также можете добавить аргумент виртуальной машины:
-Djava.library.path=c:\path\to\dll\
или же
-Djava.library.path=/path/to/lib/
Это сработало для меня. Также обратитесь к этому вопросу.
Пользователь Windows: моя проблема заключалась в том, что я помещал файлы rxtxSerial.dll и rxtxParallel.dll в неправильный каталог.
В моем случае они были в [...]/jdk1.7.0_09/bin/ вместо [...] / jre7 / bin /, хотя пути могут отличаться для разных версий Java.
В конце концов, это логика: если мы хотим, чтобы наш JAR запускался вне нашей IDE, мы должны иметь dll в нашей среде выполнения Java, а не в нашей среде разработки:)
Я решил эту проблему, добавив rxtxSerial.dll[jre 1.8.0_45/bin] и RxTxcomm.jar[jre 1.8.0_45/lib/ext]
Hy, у меня была такая же проблема при интеграции RXTXcomm в Netbeans под Ubuntu 11.10. Я предполагаю, что вы не копируете файлы в нужном месте, по крайней мере, это была моя проблема.
Под Ubuntu Java устанавливается в usr/lib/jvm. НО здесь у меня было много машин (ex java-7-openjdk-i386, java-7-common, java-6-openjdk...). В Netbeans я проверяю, какой путь JDK включен в проект, это был java-7-openjdk-i386. поэтому я взял rxtxSerial.so (под windows это rxtxSerial.dll) и скопировал его в java-7-openjdk-i386/jre/bin, и он работал как шарм.
Надеюсь, это поможет.
У меня была такая же проблема даже после установки RXTXcomm.jar в каталоге Java\jdk\lib. Основываясь на инструкциях на http://www.jcontrol.org/download/readme_rxtx_en.html я нашел файлы rxtxSerial.dll и rxtxParallel.dll. Размещение их в каталоге bin не помогло, но размещение их в каталоге lib вместе с RXTXcomm.jar решило проблему.
ФИКСИРОВАННЫЙ:
при использовании IDE, таких как Netbeans, у него есть собственный каталог для JRE, где вы, вероятно, установили драйверы RXTX, но при запуске файла JAR вне вашей IDE возникает эта ошибка...Решение - установить драйверы RXTX также в каталог JAVA JRE, который используйте для запуска всех ваших файлов JAR.
У меня такая же проблема. Поэтому я установил 32-битный JDK и добавил те, RxTx
файлы (x86) в папку Program Files(x86)/java/... вместо папки Program files/java.... Также я добавил эти файлы.dll RxTx (x86) в папку /System32. После этого проблема была решена в моем приложении.
У меня была та же проблема, в Windows 10 и Eclipse, проблема заключалась в том, что у меня была Java для 32 и 64 бит, поэтому я установил библиотеку RXTX для 64 бит, но Eclipse использовал 32-битную среду Java, поэтому я скачал RXTX для 32 бита копируют необходимые файлы в C:ProgramFilesx86/JAVA_HOME, как в инструкции для RXTX, и проблема была решена. Надеюсь, это кому-нибудь поможет.
В Netbeans 5.5 в Windows мне нужно было щелкнуть правой кнопкой мыши на "Библиотеки" в разделе "Проекты" в левой части экрана и выбрать "Добавить JAR/ папку", выбрав файл RXTXcomm.jar. Только тогда мой
enter code here
стать действительной командой. Кроме того, я получил ошибку во время выполнения, когда не удалось загрузить библиотеку rxtxSerial.DLL, потому что не смог ее найти. Мне нужно было щелкнуть правой кнопкой мыши имя проекта, выбрать свойства, выбрать "Выполнить по категориям" и добавить параметры виртуальной машины: запись
-Dja va.library.path="C:\ где-нибудь вы-константных rxtxSerial.DLL-файл;%PATH%
Пример:
-Djava.library.path="C:\rxtx-2.1-7-bins-r2\Windows\i368-mingw32\;%PATH%"
Хотя я уверен, что есть несколько способов добавить каталог к вашему пути, это сработало для меня. Обратите внимание, что по умолчанию NetBeans 5.5/JDK 1.6.0 не принимает все параметры по умолчанию (т.е. нажимает "Далее", пока я не закончу), поэтому я не изменил свои пути Java или что-либо еще. В качестве альтернативы вы можете скопировать *.dll в C:\Windows\System32\, Java найдет его там автоматически.
Обратите внимание, что вы не можете использовать 32-битную DLL при запуске 64-битной JRE: вы получите ошибку, подобную следующей:
Can't load IA 32-bit .dll on a AMD 64-bit platform thrown while loading gnu.io.RXTXCommDriver
Чтобы решить эту проблему, просто установите 32-битный JDK и добавьте новую платформу в Netbeans в меню Инструменты-> Платформы Java-> Добавить платформу и измените параметры проекта, чтобы использовать вновь созданную платформу. убедитесь, что вы печатаете
"import gnu.io.*"
от http://rxtx.qbang.org/wiki/index.php/Using_RXTX_In_NetBeans
У меня была такая же проблема. Я пытался запустить встроенный файл JAR из папки dist, и он не работал, даже если он работал из IDE NetBeans. Я скопировал файл rxtxSerial.dll в папку dist, где находился мой основной файл jar, и он начал работать нормально.
У меня была эта ошибка раньше:
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while
loading gnu.io.RXTXCommDriver
Exception in thread "Thread-7" java.lang.UnsatisfiedLinkError: no rxtxSerial in
java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:123)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.smslib.helper.CommPortIdentifier.<clinit>(CommPortIdentifier.java
:72)
at org.smslib.modem.SerialModemDriver.connectPort(SerialModemDriver.java
:69)
at org.smslib.modem.AModemDriver.connect(AModemDriver.java:114)
at org.smslib.modem.ModemGateway.startGateway(ModemGateway.java:189)
at org.smslib.Service$1Starter.run(Service.java:277)