使用外部和本地库运行jar文件

时间:2014-07-25 06:05:23

标签: java batch-file jar rxtx

我尝试用java编写一个程序,我希望每个人都可以运行程序而不需要在他们的系统中进行任何设置。我的程序使用RXTX-2.1.7库。我将rxtx-2.1.7.jar添加到我的程序中,但是我没有将它添加到我的jre中。我没有在环境变量中设置路径。所以我使用NetBeans IDE 8.0构建我的项目。 IDE制作jar文件并在同一文件夹中复制rxtx库。然后我使用此命令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)

我该怎么办?

3 个答案:

答案 0 :(得分:1)

您似乎构建了使用rxtx-2.1.7.jar的MainFrame.jar,但您还没有将rxtx-2.1.7.jar与MainFrame.jar捆绑在一起。所以在运行时,MainFrame.jar不知道在哪里查找rxtx-2.1.7.jar的类,它会给你UnsatisfiedLinkError。

您需要创建清单文件(MANIFEST.MF)并将其捆绑到MainFrame.jar。在清单文件中,添加

Class-Path: rxtx-2.1.7.jar

并将rxtx-2.1.7.jar放在与MainFrame.jar相同的文件夹中。

或者您可以使用&#34; -cp rxtx-2.1.7.jar&#34;命令行中的选项,用于向jar添加类路径。希望它有所帮助。

答案 1 :(得分:0)

您似乎忘了在lib路径中添加RXTX的共享库(.DLL,.so,.dylib)。尝试将-Djava.library.path =&#34; \ path \添加到\ rxtx \ dll&#34;

答案 2 :(得分:0)

添加cp开关。写java -cp RXTX.jar -jar MainFrame.jar