Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用外部和本地库运行jar文件_Java_Batch File_Jar_Rxtx - Fatal编程技术网

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

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编写一个程序,我希望每个人都能在没有任何系统设置的情况下运行这个程序。我的程序使用RXTX-2.1.7库。我将rxtx-2.1.7.jar添加到我的程序中,而不将其添加到我的jre中。我没有在环境变量中设置路径,所以我用NetBeansIDE8.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)
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文件的文件夹中,它正在工作。。。