我有一个ActionListener,我想要同时(因此它需要在ActionListener中)以在//.
中运行一个线程我的例子:我点击Connect按钮,它会通过端口com发送一条消息然后在发送之后我想用read_port_com函数启动我的线程,它将通过我的设备答案。
这是我的代码:
JB_Connect.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
System.out.println("Choix Port Com =>" + ChoixPortCom);
if (ChoixPortCom == null) {
JOptionPane.showMessageDialog(null, "Choose Port COM");
}
else {
CommPortIdentifier portId = null;
try {
//******************************************************
//*************** Initialisation du Port ***************
//******************************************************
portId = CommPortIdentifier.getPortIdentifier(ChoixPortCom);
SerialPort serialPort = (SerialPort) portId.open("Main Frame", 5000);
System.out.println("serialPort ouvert");
outputStream = serialPort.getOutputStream();
serialPort.setRTS(false);
serialPort.setInputBufferSize(8192);
serialPort.setOutputBufferSize(8192);
//******************************************************
//************** Port Paramètre ************************
//******************************************************
serialPort.setSerialPortParams(115400, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_XONXOFF_IN |
SerialPort.FLOWCONTROL_XONXOFF_OUT);
//******************************************************
//******************** Send ****************************
//******************************************************
System.out.println("j'envoie => 123");
outputStream.write("123".getBytes());
System.out.println("Envoie du msg -> ok");
//******************************************************
//******************** Read ****************************
//******************************************************
//******************************************************
//***************** Fermeture **************************
//******************************************************
outputStream.close();
outputStream = null;
serialPort.close();
System.out.println("Fermeture du PORT_COM -> OK");
//******************************************************
JB_Connect.setVisible(false);
JL_Connect.setVisible(true);
} catch (IOException e) {
System.out.println("IOException -> Problème");
e.printStackTrace();
} catch (UnsupportedCommOperationException e) {
System.out.println("UnsupportedCommOperationException -> Problème");
e.printStackTrace();
} catch (NoSuchPortException e) {
System.out.println("NoSuchPortException -> Problème");
e.printStackTrace();
} catch (PortInUseException e) {
System.out.println("PortInUseException -> Problème");
e.printStackTrace();
}
}
}
});
线程需要来到我放READ的地方,所以我尝试但没有工作:
我想调用setSerialListener()
private void readSerial() {
try {
int availableBytes = inputStream.available();
if (availableBytes > 0) {
// Read the serial port
inputStream.read(readBuffer, 0, availableBytes);
// Print it out
System.out.println(
new String(readBuffer, 0, availableBytes));
}
} catch (IOException e) {
}
}
private class ReadThread implements Runnable {
public void run() {
while(true) {
readSerial();
}
}
}
public void setSerialListener() {
new Thread(new ReadThread()).start();
}
这段代码取自官方的例子,但我不知道如何使用它。
编辑:
我的解决方案可能不是最好的,但它对我有用:p
boolean ok = false;
while(ok == false) {
try {
System.out.println("je suis dans le try ");
int availableBytes = inputStream.available();
if (availableBytes > 0) {
// Read the serial port
inputStream.read(readBuffer, 0, availableBytes);
// Print it out
System.out.println("J'ai lu : ");
System.out.println(
new String(readBuffer, 0, availableBytes));
Reponse = new String(readBuffer, "UTF-8"); // bytes -> String
ok = true;
}
} catch (IOException e) {
}
}