原来项目是从maven中搜索出来的mina的client-server版本,可以TCP正常工作,后来又用到了串口,发现当串口发送数据时出现:java.lang.AbstractMethodError: org.apache.mina.transport.serial.SerialSessionImpl$SerialIoProcessor.write(Lorg/apache/mina/core/session/IoSession;Lorg/apache/mina/core/write/WriteRequest;),根据这个帖子所说,知道是版本不对的原因,所以删除了client-server版本,下了mfz-rxtx-2.2-20081207-win-x64,将rxtxParallel/rxtxSerial.dll放到windows/system32下,将RXTXcomm.jar放到jkd/jre/lib/ext/下,同时在项目中引入rxtxcomm.jar,还做如下处理:
pom.xml从Maven中导mina-transport-serial 2.1.3时总是会将mina-integration-beans依赖导入,而它又用到了log4j低版本,而我的springboot项目中已经用到了高版本的log4j,当将低版本log4j和mina-integration-beans都排除又发现没有了mina-core,所以pom.xml中改为如下:
<!-- https://mvnrepository.com/artifact/org.apache.mina/mina-transport-serial --> <dependency> <groupId>org.apache.mina</groupId> <artifactId>mina-transport-serial</artifactId> <version>2.1.3</version> <exclusions> <exclusion> <groupId>org.apache.mina</groupId> <artifactId>mina-integration-beans</artifactId> </exclusion> <exclusion> <groupId>org.apache.mina</groupId> <artifactId>mina-core</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.mina/mina-core --> <dependency> <groupId>org.apache.mina</groupId> <artifactId>mina-core</artifactId> <version>2.1.3</version> </dependency>
程序正常了,可以发和收串口数据,但又出现:
Exception in thread "Thread-10" java.nio.InvalidMarkException
at java.nio.Buffer.reset(Buffer.java:306)
at org.apache.mina.core.buffer.AbstractIoBuffer.reset(AbstractIoBuffer.java:425)
at org.apache.mina.transport.serial.SerialSessionImpl.flushWrites(SerialSessionImpl.java:196)
at org.apache.mina.transport.serial.SerialSessionImpl.access$300(SerialSessionImpl.java:51)
at org.apache.mina.transport.serial.SerialSessionImpl$WriteWorker.run(SerialSessionImpl.java:156)
只不过不影响正常的收发数据,目前还不知道原因。
来源:oschina
链接:https://my.oschina.net/u/2963604/blog/3158106