我正在开发一个使用Java与串口通信的项目。我是否需要将设备连接到串口以测试以下代码?
Enumeration ports = CommPortIdentifier.getPortIdentifiers();
while (ports.hasMoreElements()) {
CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
String type;
switch (port.getPortType()) {
case CommPortIdentifier.PORT_PARALLEL:
type = "Parallel";
break;
case CommPortIdentifier.PORT_SERIAL:
type = "Serial";
break;
default: /// Shouldn't happen
type = "Unknown";
break;
}
System.out.println(port.getName() + ": " + type);
}
使此代码有效的任何解决方案。目前我收到如下错误。(没有将任何设备连接到串口。
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.sun.comm.SunrayInfo.isSessionActive()Z
at com.sun.comm.SunrayInfo.isSessionActive(Native Method)
at com.sun.comm.Portmapping.registerCommPorts(Portmapping.java:155)
at com.sun.comm.Portmapping.refreshPortDatabase(Portmapping.java:100)
at javax.comm.CommPortIdentifier.<clinit>(CommPortIdentifier.java:138)
at PortTest.main(PortTest.java:9)
Java Result: 1
我用jre配置了comm。我跟着this博客做了。
答案 0 :(得分:2)
您缺少所需的本机库。您发布的错误行上方的行告诉您。
您需要安装javax.comm扩展程序 - http://www.oracle.com/technetwork/java/index-jsp-141752.html
如果您使用的是Windows,则Sun / Oracle不再支持或提供该窗口。您可以在网上找到旧版本或其他人移植它。
答案 1 :(得分:0)
经过一番挣扎,我得到了代码。
我犯的一个错误是使用Fedora 13的RxTx 2.2
库。它使用2.2版本的libSerial
和libParellal
文件以及2.1 RxTxComm
jar文件。当我删除它并使用RxTx2.1
时,我收到了如下错误。
gnu.io.RXTXCommDriver cannot be cast to javax.comm.CommDriver
在检查此错误时,我发现了我犯的第二个错误并解决了上述问题。我正在使用带有Java Comm API的RxTx驱动程序。实际上,Java Comm API中所需的类文件已在RxTx库中以“gnu.io
”包提供。
所以我将所有javax.comm.*
个包更改为gnu.io.*
。现在我可以毫无错误地运行应用程序。