你好,我有以下代码:
if(!serialPort.isOpened()) {
// ouverture du port
serialPort.openPort();
System.out.println("JSSC -> initPort() : Ouverture du port");
//config billet
serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_7, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN);
// on crée une ecoute sur le port pour recuperer la reponse
serialPort.addEventListener(new SerialPortEventListener() {
@Override
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR() && event.getEventValue() > 0) {
try {
String dataReceived = serialPort.readHexString(event.getEventValue());
System.out.println("JSSC -> initPort() : Received response hexstring: " + dataReceived);
CashSorterSend.getInstance().renvoyerReponse(dataReceived);
System.out.println("----------------------------------");
}
catch (SerialPortException ex) {
System.out.println("JSSC -> initPort() : Error in receiving string from COM-port: " + ex);
}
}
}
});
}
如果我在单击按钮时发送一条消息,则串行端口发送数据答案。但是我,我想无限期地重复一条消息,使用以下代码:
// on declare la tache de fond qui interrogera la compteuse a billet
taskDetailBillets = new Task<Void>() {
@Override
protected Void call() throws Exception {
while (true) {
Thread.sleep(300);
CashSorterSend.getInstance().detailBillets();
}
}
};
// on demarre notre thread
threadDetailBillets = new Thread(taskDetailBillets);
threadDetailBillets.start();
和以下类:
public class DetailBillets implements Runnable {
@Override
public void run() {
System.out.println("DetailBillets -> run() : Thread DetailBillets");
try {
Thread.sleep(600);
JSSC.getInstance().sendMessage(Constants.COMMAND_HEXA_BILLET_DETAILS, true);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
我的问题是端口不发送答案...消息在线程中无限发送,但端口不发送应答...将线程发送到端口答案的速度如此之快??如何循环发送消息?
谢谢,很抱歉错误。
而不是while(true)
,你可以把代码放在一个Executors.newScheduledThreadPool(1);
目前,我正在查看代码,我想知道 Runnable DetailBillets
是如何被触发的。
JSSC.getInstance()
引用第一个代码块中使用的相同serialPort
实例的单例吗?sendMessage
的实现是什么?是否使用 SerialPort
的 writeString 方法?
也许在您的serialPort
实例上指定一个flowControlMode
?就我而言:SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT