【问题标题】:Exported JAR file doesn't detect serial ports导出的 JAR 文件未检测到串行端口
【发布时间】:2024-01-11 05:25:02
【问题描述】:

这段代码 sn-p 应该做什么:检测所有串行端口并将端口名称打印到屏幕上。

问题: 在eclipse中运行时,程序检测到串口正常;但是,在导出可运行的 jar 并运行该 jar 后,该 jar 检测到 NO 端口。我非常怀疑这与实际代码本身有什么关系(因为它在 eclipse 中运行得很好),但我已经把 sn-p 放在了以防万一我错过了什么。

我尝试过/已经做过/看过的:

我认为它可能只是我的计算机,所以我已经尝试在另一台计算机上运行 jar,但收到了相同的结果。我还确保一切都在正确的位置(jar 文件、.dll 文件和属性文件)。我四次检查以确保我的构建路径包含正确的文件。

我已经探索过: http://www.oracle.com/technetwork/java/index-139971.html

我在过去的一个小时里一直在寻找与我类似的问题的网站和 SO 问题,但我没有找到解决方案。

这是我的代码基于的网站:http://en.wikibooks.org/wiki/Serial_Programming/Serial_Java#JavaComm_API

问题: 为什么会发生这种情况/我该如何解决?

附加信息:我正在使用javax.comm,带有 32 位版本的 jdk 1.8.0_31,运行 Windows 8。jar 文件运行良好(它有一个单独的组件完美运行)。编译期间没有错误(或警告),也没有抛出异常。我正在使用java -jar program.jar 运行 jar。我知道我的电脑有一个串口,因为当我运行程序时 Eclipse 显示 COM1。 (程序也可以检测并口,但只能在eclipse中)

    boolean portsDetected = false;
    Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers();
    while (portIdentifiers.hasMoreElements()) {
            CommPortIdentifier pid = (CommPortIdentifier)portIdentifiers.nextElement();
        if ((pid.getPortType() == CommPortIdentifier.PORT_SERIAL)) {    
            System.out.println(pid.getName());
            portsDetected = true;
        }
    }
    if (!portsDetected) {
        System.out.println("No serial ports detected");
        return 0;
    }

如果您还有其他需要了解或想看的内容,请询问,您将收到!

【问题讨论】:

  • 你搞清楚了吗?我也有同样的问题
  • @UsmanRiaz 我还没弄明白 - 实际上,我放弃了这个问题并将它传递给了另一个人。

标签: java eclipse serial-port executable-jar javax.comm


【解决方案1】:
1. Copy win32.dll file to c:\ProgramFiles\java\jdk\bin
2. Copy comm.jar file to c:\ProgramFiles\java\jdk\lib
3. Copy javax.comm properties file to c:\ProgramFiles\java\jdk\lib
4. Copy 
win32com.dll  to jre/bin

comm.jar to  jre/lib/ext

java.comm.properties to jre/lib



 Note:Add all files in step 4 to both JRE.  Jre Dir and Jre in JDK folder

这解决了我的问题

【讨论】:

    最近更新 更多