串口侦听器不返回数据(JSSC)

时间:2017-01-26 09:07:22

标签: java javafx jssc

您好我有以下代码:

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

}

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

感谢并抱歉犯错误。

1 个答案:

答案 0 :(得分:0)

您可以将代码放在while(true)

中,而不是Executors.newScheduledThreadPool(1);

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

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

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