java in.available_如何解决错误java.io.IOException:串行通信的nativeavailable输入/输出错误?...

在环回场景中我没有尝试通过RXTX进行串行通信,但这无关紧要.唯一看起来有点可疑的是将输入流实例提供给SerialReader的部分.我建议您将SerialPort实例传递给两个构造函数,并且每次需要读取/写入端口的流时,请使用流getter,例如阅读:

public static class SerialReader implements Runnable

{

SerialPort serialPort;

public SerialReader ( SerialPort serialPort )

{

this.serialPort = serialPort;

}

public void run ()

{

byte[] buffer = new byte[1024];

int len = -1;

try

{

while ( ( len = serialPort.getInputStream().read(buffer)) > -1 )

{

System.out.print(new String(buffer,0,len));

}

}

catch ( IOException e )

{

e.printStackTrace();

}

}

}

请反馈.

更新:

从我的个人experience RXTX是一个错误的解决方案.然而,这并不意味着这种情况是由潜在的RXTX错误引起的.这可能是因为串行端口设置不正确,但在您的情况下,它是带有标准连接参数的标准端口名称.作为一个loooong镜头,尝试用9600替换波特率115200,但这可能无济于事.我可以从这里提供三条路径:

>尝试调试RXTX代码 – 您可以更深入地了解正在发生的事情

>阅读serial line troubleshooting

>考虑用于串行通信的其他Java解决方案,例如JSSC而不是RXTX.

更新:

我担心我一直不专心而且跳了起来. JSSC本机库(.so,.dll)位于jssc.jar中,因此它们会“自动”加载.使用RXTX,它们位于jar文件之外,因此您需要设置java.library.path系统属性,以便JVM查找并加载它们,否则您将获得UnsatisfiedLinkError.

您可以通过双击打开JSSC jar文件,它将在归档器中打开,因为它是actually a zip file.与RXTX一样,您会注意到本机libs文件组织在名为操作系统(windows,linux,RXTX)的目录中还有Mac_OS_X和Solaris).

在这些目录中有本机libs文件,.so,dll.和.jnilib类型的文件,它们以computer architectures命名.这是该词的更广泛含义,这些是instruction set architectures (ISA)的短代码.指令集定义了CPU的指令集(命令).换句话说,有许多不同的CPU模型(如AllWinner A13)符合相同的指令集.编译本机libs源代码以生成可执行文件(.so,…),这是来自同一指令集的一堆指令.

您使用JSSC获得UnsatisfiedLinkError的原因可能是因为您使用的是不受支持的体系结构,并且在不存在的目录中搜索相应的本机lib. ISA短代码,也是JSSC的这些目录的名称是x86和PPC架构,32和64位变体. RXTX有许多其他的,但我认为它们都不等同于ARMv7,这是你的AllWinner A13 CPU的ISA.

您可以通过在终端中执行此命令来确定您的architecture:

uname -m

在我的linux上它输出:

x86_64

这意味着它是64bit Intel 8086 architecture.JSSC和RXTX都实现了这种架构.如果未实现(支持)您的体系结构,则不能使用这些库连接到该计算机上的串行端口.在这种情况下,您必须自己编写或获得合适的实现.

如果架构匹配并且仍然存在本机错误,则可以尝试recompiling本机库源.为RXTX和JSSC提供了来源.

更新:

如果您的架构是armv7l,这意味着JSSC,RXTX和JavaComm(约会马利说,RXTX“祖先”)处于当前状态在您的场景中毫无用处.

我没有找到任何其他用于串行通信的开源java库.如果确实如此,您需要编写符合上述库之一的接口的自己的本机库,以使它们有用.换句话说,您需要编写一个C程序(类似于:1,2),其功能为serial communication和JNI Java库接口.

在答案完整性的意义上,我将提到商业产品SerialIO,它支持一些ARM架构(不知道你的是否是其中之一).但是,如果您决定使用该解决方案,则可以始终向其支持人员发送查询.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值