0

您好,我有以下代码:

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();
    }
}

}

我的问题是端口不发送答案...消息在线程中无限发送,但端口不发送答案...在线程中发送到端口答案的速度如此之快??如何循环发送消息?

感谢并为错误感到抱歉。

4

1 回答 1

0

而不是 a while(true),您可以将代码放在 aExecutors.newScheduledThreadPool(1);

目前,我正在查看代码,我想知道DetailBilletsRunnable 是如何被解雇的。

是一个引用了第一个代码块中使用JSSC.getInstance()的相同实例的单例吗?serialPort的实施是sendMessage什么?是否使用 writeString 方法SerialPort

flowControlMode也许在您的serialPort实例上指定一个?就我而言:SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT

于 2017-01-26T15:52:21.860 回答