您好我有以下代码:
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();
}
}
}
我的问题是端口没有发送答案...消息在线程中无限发送但是端口没有发送答案...它是如此速度发送到线程端口答案? 如何循环发送消息?
感谢并抱歉犯错误。
答案 0 :(得分:0)
您可以将代码放在while(true)
Executors.newScheduledThreadPool(1);
目前,我正在查看代码,我想知道DetailBillets
Runnable是如何被解雇的。
JSSC.getInstance()
是否是引用第一个代码块中使用的serialPort
的同一个实例的单例? sendMessage
的实施是什么?它是否使用SerialPort
的
也许在flowControlMode
个实例上指定serialPort
?就我而言:SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT