#java #serial-port #listener #java-11 #jssc
#java #последовательный порт #прослушиватель #java-11 #jssc
Вопрос:
Я пытаюсь написать небольшую программу для кассового аппарата, используя библиотеку JSSC. Я использовал эту библиотеку для работы со сканером штрих-кодов, и она работает нормально, и я получаю возвращаемое значение от сканера. Но для кассового аппарата я не получаю никакого значения. Всякий раз, когда кассовый аппарат открыт, ringindicator = true и false при закрытии. Как мне создать прослушиватель, чтобы получить статус ringindicator в данном случае isRING() в классе SerialPort. Спасибо!
public class CashRegister implements SerialPortEventListener {
private SerialPort serialPort;
private CashRegisterCallBack callback;
public CashRegister(CashRegisterCallBack callback) {
this.callback = callback;
}
private boolean resu<
public void startScan() {
try {
serialPort = new SerialPort("COM1");
if (serialPort.isOpened()) {
serialPort.closePort();
}
serialPort.openPort();//Open serial port
serialPort.addEventListener(this);
//Set params. Also you can set params by this string: serialPort.setParams(9600, 8, 1, 0);
serialPort.setParams(9600, 8, 1, 0);
//Triggers scanner in scanning mode
serialPort.writeByte((byte)7); // opens the register
} catch (SerialPortException ex) {
System.out.println(ex);
}
}
//doesnot get to this method when closed
@Override
public void serialEvent(SerialPortEvent event) {
boolean isDataAvailable = event.isRING();
//Check bytes count in the input buffer
System.out.println(isDataAvailable);
try {
this.callback.callback(isDataAvailable);
serialPort.writeString(new String(new byte[]{0x03}));
System.out.println("Close message sent");
serialPort.removeEventListener();
System.out.println("Event Listener removed");
serialPort.closePort();
System.out.println("Port Closed");
System.exit(0);
} catch (IOException | InterruptedException | SerialPortException e) {
e.printStackTrace();
}
}
}
public interface CashRegisterCallBack {
void callback(boolean result) throws IOException, InterruptedException;
}
Комментарии:
1. Если вы не используете настоящий модем, сигнальные линии RING и RLSD часто не соединены. Если в спецификациях так называемого «cash register case» указано, что статус открытия / закрытия фактически уведомляется от RING, описываются спецификации кабеля, необходимого для подключения, или продается выделенный кабель. Пожалуйста, проверьте, используете ли вы этот кабель.
2. Спасибо за ваш ответ. Я использую предоставленный кабель, а также имею программное обеспечение от поставщика. Программное обеспечение показывает состояние индикатора звонка с тем же кабелем, который мы используем, и я пытаюсь имитировать то же самое в своей программе. Как мне это сделать, используя любую библиотеку Java. Есть идеи?
3. Пожалуйста, попробуйте указать MASK_RING в setEventsMask , как в первом примере на этой странице примеров Java SerialPortException.