Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决端口写入时的IO异常_Java_Serial Port_Rxtx - Fatal编程技术网

Java 如何解决端口写入时的IO异常

Java 如何解决端口写入时的IO异常,java,serial-port,rxtx,Java,Serial Port,Rxtx,我想将字节数组写入SerialportOutputStream,但得到一个错误“java.IO.Exception” 以下是我尝试编写的数组: byte[] b = new byte[255] {127, -112, 17, 126, -100, 76, 98, 68, -48, -94, 51, -36, -32, -40, -79, -114, -69, 67, 51, 69, 33, 83, 0,

我想将字节数组写入Serialport
OutputStream
,但得到一个错误“java.IO.Exception”

以下是我尝试编写的数组:

byte[] b = new byte[255] {127, -112, 17, 126, -100, 76, 98, 68, -48, -94, 51,
                          -36, -32, -40, -79, -114, -69, 67, 51, 69, 33, 83, 0,
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...}
以下方法打开并写入端口:

public boolean OpenSSPComPort(SSP_COMMAND cmd){
    try
    {
        CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(cmd.ComPort);
        if ( portIdentifier.isCurrentlyOwned() )
        {
            System.out.println("Error: Port is currently in use");
        }
        else
        {
            comPort = (SerialPort) portIdentifier.open("Open Port",2000);
            if ( comPort instanceof SerialPort )
            {
                SerialPort serialPort = (SerialPort) comPort;
                serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_2,SerialPort.PARITY_NONE);
                in = serialPort.getInputStream();
                out = serialPort.getOutputStream();
                serialPort.addEventListener(this);
                serialPort.notifyOnDataAvailable(true);

                in = comPort.getInputStream();
                out = comPort.getOutputStream();

                comPort.addEventListener(this);
                comPort.notifyOnDataAvailable(true);
            }
            else
            {
                System.out.println("Error: Only serial ports are handled by this example.");
            }

            System.out.println("Roshan:Port open successfull");
        }
    }
    catch (Exception ex)
    {
         lastException = ex;
         return false;
    }

    return true;
}

public boolean WritePort()
{
    try
    {
        byte[] byteArray = new byte[ssp.txData.length];
        for(int i = 0; i<ssp.txData.length; i++)
            byteArray[i] = (byte) ssp.txData[i];
        System.out.println("array to write"+Arrays.toString(byteArray));
        out.write(byteArray, 0, byteArray.length);  //here gets the IOException
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
        return false;
    }
    return true;
}

可能是你写得太快了。是否尝试过将波特率设置为更高或写入速度较慢。它仍然一次调试一个字节吗?

打开端口或写入端口时是否会出现错误?成功打开端口并在端口上成功写入6次,但在第7次获得IOException您可以在调用
WritePort
的位置显示完整的代码吗?如果您在gnu.io.rxtexport$SerialOutputStream.write(rxtexport.java:1159)在dllutities.SSPComms.WritePort(SSPComms.java:685)在dllutities.SSPComms.SSPSendCommand(SSPComms.java:161)在hopper.CHopper.SendCommand(CHopper.java:120)处给出exception...io.IOException的完整堆栈跟踪就更好了在hopper.CHopper.SetupRequest(CHopper.java:962)在gui.Form1.ConnectToValidator(Form1.java:383)没有,我发现端口在第7次写入时被关闭,如何持久化它仍然可能是你写得太快了。rxtx没有设备告诉你什么时候可以写吗?
java.io.IOException
    at gnu.io.RXTXPort$SerialOutputStream.write(RXTXPort.java:1159)
    at dllUtilities.SSPComms.WritePort(SSPComms.java:685)
    at dllUtilities.SSPComms.SSPSendCommand(SSPComms.java:161)
    at hopper.CHopper.SendCommand(CHopper.java:120)
    at hopper.CHopper.SetProtocolVersion(CHopper.java:783)
    at gui.Form1.ConnectToValidator(Form1.java:376)
    at gui.Form1.MainLoop(Form1.java:235)