Java 使用外部和本地库运行jar文件
我试着用java编写一个程序,我希望每个人都能在没有任何系统设置的情况下运行这个程序。我的程序使用RXTX-2.1.7库。我将rxtx-2.1.7.jar添加到我的程序中,而不将其添加到我的jre中。我没有在环境变量中设置路径,所以我用NetBeansIDE8.0构建我的项目。IDE生成jar文件并在同一文件夹中复制rxtx库。然后我用这个命令创建了一个批处理文件Java 使用外部和本地库运行jar文件,java,batch-file,jar,rxtx,Java,Batch File,Jar,Rxtx,我试着用java编写一个程序,我希望每个人都能在没有任何系统设置的情况下运行这个程序。我的程序使用RXTX-2.1.7库。我将rxtx-2.1.7.jar添加到我的程序中,而不将其添加到我的jre中。我没有在环境变量中设置路径,所以我用NetBeansIDE8.0构建我的项目。IDE生成jar文件并在同一文件夹中复制rxtx库。然后我用这个命令创建了一个批处理文件java-jar MainFrame.jar。但当我运行批处理文件时,我看到以下错误: java.lang.UnsatisfiedLi
java-jar MainFrame.jar
。但当我运行批处理文件时,我看到以下错误:
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1119)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
at pkg.MainFrame.process(MainFrame.java:82)
at pkg.MainFrame.access$100(MainFrame.java:12)
at pkg.MainFrame$1.run(MainFrame.java:71)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
java.lang.UnsatisfiedLinkError:加载gnu.io.RXTXCommDriver时在java.library.path中没有抛出rxtxSerial
线程“AWT-EventQueue-0”java.lang.UnsatifiedLinkError中出现异常:java.library.path中没有rxtxSerial
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
位于java.lang.Runtime.loadLibrary0(Runtime.java:870)
位于java.lang.System.loadLibrary(System.java:1119)
位于gnu.io.CommPortIdentifier。(CommPortIdentifier.java:83)
位于pkg.MainFrame.process(MainFrame.java:82)
在pkg.MainFrame.access$100(MainFrame.java:12)
在pkg.MainFrame$1.run(MainFrame.java:71)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)中
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
在java.awt.EventQueue.access$400(EventQueue.java:97)
位于java.awt.EventQueue$3.run(EventQueue.java:697)
位于java.awt.EventQueue$3.run(EventQueue.java:691)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)中
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:105)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我该怎么办?您似乎忘记在库路径中添加RXTX的共享库(.DLL、.so、.dylib)。尝试添加-Djava.library.path=“\path\to\rxtx\dll”添加cp开关。编写java-cp RXTX.jar-jar MainFrame.jar似乎您已经构建了使用RXTX-2.1.7.jar的MainFrame.jar,但是您还没有将RXTX-2.1.7.jar与MainFrame.jar捆绑在一起。因此,在运行时,由于MainFrame.jar不知道在哪里查找rxtx-2.1.7.jar类,它会给您带来不满意的LinkError 您需要创建清单文件(manifest.MF)并将其绑定到MainFrame.jar。在清单文件中,添加
Class-Path: rxtx-2.1.7.jar
并将rxtx-2.1.7.jar放在与MainFrame.jar相同的文件夹中
或者可以在命令行中使用“-cp rxtx-2.1.7.jar”选项将类路径添加到jar中。希望有帮助。我将
rxtxSerial.dll
复制到jar文件的文件夹中,它正在工作。。。