我正在使用JSerial
进行串行通信。 JSerial
提供了获取可用端口列表的方法。当我使用这个方法时,它返回COM
个端口,因为它应该是一个List。但是我对返回值有些麻烦。如果我使用调试器一切都很好,返回值看起来应该"COM1"
。但是当我运行项目时,返回值会受到某种程度的影响。输出看起来像这样 COM110000-00帿阀COM COM16000-0005帿À耀fF1CE}
问题是这些值与Debugging和runtime不同。
有谁知道是什么原因引起的?
答案 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ǖ㭪谀