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

标签 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)

我应该做什么?

最佳答案

您似乎已经构建了使用 rxtx-2.1.7.jar 的 MainFrame.jar,但尚未将 rxtx-2.1.7.jar 与 MainFrame.jar 捆绑在一起。因此,在运行时,由于 MainFrame.jar 不知道在哪里查找 rxtx-2.1.7.jar 的类,因此会出现 UnsatisfiedLinkError。

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

Class-Path: rxtx-2.1.7.jar

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

或者您可以在命令行中使用“-cp rxtx-2.1.7.jar”选项将类路径添加到您的 jar 中。希望有帮助。

关于java - 使用外部和本地库运行 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24949045/

相关文章:

java - 在gradle中包括本地源jar,以便使用Eclipse?

java - 将eclipse项目导出到jar

java - 类加载器问题 - 如何确定加载了哪些库版本(jar 文件)

java - 获取 View 的监听器

java - Java 中的错误逻辑

batch-file - 我可以获取 RFC 3339 格式的当前日期吗?

batch-file - 在 "IF EXIST"内,等待两个小时然后退出

java - 从 ListView 获取子项会导致 android.view.View android.view.View.findViewById(int) 出现空对象引用

java - 如何为显式抛出的异常编写 junit 测试

mysql - 调用目录中的文件列表并在一行中传递它们