1
我使用這段代碼從arduino獲取數據並將其寫入文本文件。在我寫入文件後,我想關閉端口,但是我不能這樣做,即使我將commPort傳遞給serialreader類,以便它可以在使用數據後關閉它。獲取數據後關閉串口,使用RXTX的java
我使用此函數關閉端口,但Java不接受port.close();
。這裏是我的代碼:
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import sun.misc.IOUtils;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
public class TwoWaySerialComm
{
public TwoWaySerialComm()
{
super();
}
void connect (String portName) throws Exception
{
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if (portIdentifier.isCurrentlyOwned())
{
System.out.println("Error: Port is currently in use");
}
else
{
CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
if (commPort instanceof SerialPort)
{
SerialPort serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
InputStream in = serialPort.getInputStream();
(new Thread(new SerialReader(in, commPort))).start();
}
else
{
System.out.println("Error: Only serial ports are handled by this example.");
}
}
}
public static class SerialReader implements Runnable
{
InputStream in;
CommPort port;
public SerialReader (InputStream in, CommPort port)
{
this.in = in;
}
public void run()
{
byte[] buffer = new byte[1024];
int len = -1;
try
{
String txt = "";
long startTime = System.currentTimeMillis(); //fetch starting time
while((len = this.in.read(buffer)) > -1 & (System.currentTimeMillis()-startTime)<6000)
{
System.out.print(new String(buffer,0,len));
txt = txt + (new String(buffer,0,len));
}
PrintWriter writer = new PrintWriter("Patient" + startTime + ".txt", "UTF-8");
writer.println(txt);
writer.close();
this.in.close();
return;
port.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}