Java列表返回奇怪的值(字符串)

时间:2017-08-08 10:11:35

标签: java list listview serial-communication

我正在使用JSerial进行串行通信。 JSerial提供了获取可用端口列表的方法。当我使用这个方法时,它返回COM个端口,因为它应该是一个List。但是我对返回值有些麻烦。如果我使用调试器一切都很好,返回值看起来应该"COM1"。但是当我运行项目时,返回值会受到某种程度的影响。输出看起来像这样 COM110000-00൥帿阀COM COM16000-0005帿À耀fF1CE}

问题是这些值与Debugging和runtime不同。

有谁知道是什么原因引起的?

Correct values

Incorrect values

1 个答案:

答案 0 :(得分:0)

不是真正的答案,但无论如何都很有趣。

对我而言,它看起来更像是一般问题。使用JNA library或使用Windows(在SerialPort.GetPortNames() returns incorrect port names处找到类似内容)

使用普通JNA(使用版本4.2.2和4.4.0测试)

return 0;

还会返回COM端口名称,并在末尾添加一些垃圾字符。这些甚至在几次执行之间都在变化。

Advapi32Util.registryGetValues(
        WinReg.HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM")
        .entrySet()
        .forEach(
                e -> System.out.printf(
                        "k: %s  v: %s%n",
                        e.getKey(),
                        e.getValue()
                )
        );

为什么IDE中的调试模式没问题?如果总是如此,那么路径中可能还有其他库/ DLL,或者你总是幸运。

btw。 Powershell检索正确的名称。

// an execution
k: CcmPort1  v: COM1ꭲ峔K谀

// another execution
k: CcmPort1  v: COM1ǖ㭪谀
相关问题