2017-08-07 44 views
0

我正在研究studens項目,它需要讀取通過USB從AtMega發送的數據(使用虛擬串行端口)。要訪問串口,我使用的是NeuronRobotics的nrjavaserial(https://github.com/NeuronRobotics/nrjavaserial),這是RXTX的一個分支。爲了管理我的依賴,我使用了maven。下面是我得到的,當我運行CommPortIdentifier.getPortIdentifiers();(或任何靜態CommPortIdentifier功能):java.lang.UnsatisfiedLinkError:在調試期間只能找到依賴庫

java.lang.UnsatisfiedLinkError: C:\Users\Grześ\AppData\Local\Temp\libNRJavaSerial_Grze?_0\libNRJavaSerial.dll: Can't find dependent libraries 
    at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1938) 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1821) 
    at java.lang.Runtime.load0(Runtime.java:809) 
    at java.lang.System.load(System.java:1086) 
    at gnu.io.NativeResource.loadResource(NativeResource.java:142) 
    at gnu.io.NativeResource.inJarLoad(NativeResource.java:40) 
    at gnu.io.NativeResource.loadLib(NativeResource.java:60) 
    at gnu.io.NativeResource.load(NativeResource.java:28) 
    at gnu.io.SerialManager.<init>(SerialManager.java:10) 
    at gnu.io.SerialManager.getInstance(SerialManager.java:16) 
    at gnu.io.RXTXCommDriver.<clinit>(RXTXCommDriver.java:87) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:109) 
    at pl.edu.pwr.aerospace.enginebench.serial.SerialCommunicator.getAvaliablePorts(SerialCommunicator.java:34) 
    at pl.edu.pwr.aerospace.enginebench.cli.Main.connectCommunicator(Main.java:35) 
    at pl.edu.pwr.aerospace.enginebench.cli.Main.main(Main.java:21) 
java.lang.UnsatisfiedLinkError: C:\Users\Grześ\AppData\Local\Temp\libNRJavaSerial_Grze?_0\libNRJavaSerial.dll: Can't find dependent libraries 
    at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1938) 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1821) 
    at java.lang.Runtime.load0(Runtime.java:809) 
    at java.lang.System.load(System.java:1086) 
    at gnu.io.NativeResource.loadResource(NativeResource.java:142) 
    at gnu.io.NativeResource.inJarLoad(NativeResource.java:40) 
    at gnu.io.NativeResource.loadLib(NativeResource.java:60) 
    at gnu.io.NativeResource.load(NativeResource.java:28) 
    at gnu.io.SerialManager.<init>(SerialManager.java:10) 
    at gnu.io.SerialManager.getInstance(SerialManager.java:16) 
    at gnu.io.RXTXCommDriver.<clinit>(RXTXCommDriver.java:87) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:109) 
    at pl.edu.pwr.aerospace.enginebench.serial.SerialCommunicator.getAvaliablePorts(SerialCommunicator.java:34) 
    at pl.edu.pwr.aerospace.enginebench.cli.Main.connectCommunicator(Main.java:35) 
    at pl.edu.pwr.aerospace.enginebench.cli.Main.main(Main.java:21) 
java.lang.ExceptionInInitializerError thrown while loading gnu.io.RXTXCommDriver 
java.lang.NoClassDefFoundError: Could not initialize class gnu.io.RXTXCommDriver thrown while loading gnu.io.RXTXCommDriver 

這裏是我的依賴關係:

<dependencies> 

     <dependency> 
      <groupId>com.neuronrobotics</groupId> 
      <artifactId>nrjavaserial</artifactId> 
      <version>3.12.1</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.17</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
      <scope>test</scope> 
     </dependency> 

</dependencies> 

Strangly,這只是在調試過程中發生的,當我運行程序通常它的工作原理像魅力。任何想法爲什麼?

我發現人們與其他庫有類似的問題,但所有這些解決方案是移動DLL或更新類路徑,但正如我使用的Maven我懷疑在這種情況下,解決方案將有所不同。

回答

0

我設法解決我的問題。這個問題的根源是我的用戶名 - 「Grześ」,它包含非標準字符'ś'。正如您在異常信息的第一行中可能看到的那樣:

java.lang.UnsatisfiedLinkError: C:\Users\Grześ\AppData\Local\Temp\libNRJavaSerial_Grze?_0\libNRJavaSerial.dll: Can't find dependent libraries 

該路徑包含問號而不是此字符。在Windows屬性中更改我的用戶名已修復此問題

相關問題