JPos-сканер обнаружил, но не получил от него данные - PullRequest
0 голосов
/ 07 мая 2018

Я пытался заставить JPos работать с USB-сканером моего клиента. Очевидно, он обнаруживает сканер очень хорошо, но при чтении карт ничего не появляется. Я использовал пример исходного кода библиотеки только для того, чтобы убедиться, что могу работать с устройством, прежде чем внедрить его в свое основное программное обеспечение. Вот код, который должен его протестировать (контроллер javafx fxml, реализующий интерфейс jpos):

import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.scene.control.TextArea;
import jpos.JposException;
import jpos.events.DataEvent;
import jpos.events.DataListener;

public class UI_Controller implements DataListener{

private jpos.Scanner scanner = new jpos.Scanner();
private jpos.Scanner scanner2 = new jpos.Scanner();

@FXML
TextArea textbox;

@FXML
TextArea textbox2;

@FXML
public void buttonClick() {
        updateBox(textbox, "Initialising JavaPOS...\n");
        // Create scanner instance and register for data events.
        scanner = new jpos.Scanner();

        // Initialize the scanner.  Exception thrown if a method fails.
        try {
            updateBox(textbox, "Adding DataListener...\n");
            scanner.addDataListener(this);
            updateBox(textbox, "Opening the device DLS-QW2120-USB-OEM...\n");
            scanner.open("DLS-QW2120-USB-OEM");
            updateBox(textbox, "Claiming the device...\n");
            scanner.claim(1000);
            updateBox(textbox, "Enabling the device...\n");
            scanner.setDeviceEnabled(true);
            updateBox(textbox, "Setting 'DataEventEnabled' property...\n");
            scanner.setDataEventEnabled(true);
            updateBox(textbox, "---SUCCESS!---\n");
            updateBox(textbox, "[ LISTENING MODE ]");
        } catch (JposException ex) {
            updateBox(textbox, "=== JPOS EXCEPTION TRACE[1] ===: \n" + ex.toString());
            updateBox(textbox, "\n=== END OF EXCEPTION ===\n");
            updateBox(textbox, "\nClosing DLS-QW2120-USB-OEM\n");
            try {
                scanner.close();
            } catch (JposException e) {
                updateBox(textbox, "=== JPOS EXCEPTION TRACE[1] ===: \n" + e.toString());
                updateBox(textbox, "\n=== END OF EXCEPTION ===\n");
            }
            updateBox(textbox, "\nTrying DLS-QW2100-USB-OEM\n");
             try {
                updateBox(textbox, "Opening the device...\n");
                scanner.open("DLS-QW2100-USB-OEM");
                updateBox(textbox, "Claiming the device...\n");
                scanner.claim(1000);
                updateBox(textbox, "Adding DataListener...\n");
                scanner.addDataListener(this);
                updateBox(textbox, "Enabling the device...\n");
                scanner.setDeviceEnabled(true);
                updateBox(textbox, "Setting 'DataEventEnabled' property...\n");
                scanner.setDataEventEnabled(true);
                updateBox(textbox, "---SUCCESS!---\n");
                updateBox(textbox, "[ LISTENING MODE ]");
            } catch (JposException ex2) {
                updateBox(textbox, "=== JPOS EXCEPTION TRACE[1] ===: \n" + ex2.toString());
                updateBox(textbox, "\n=== END OF EXCEPTION ===\n");

            }
        }
        //...Success! Continue doing work...
}

@FXML
public void button2Click() {
    updateBox(textbox, "Initialising JavaPOS...\n");
    // Create scanner instance and register for data events.
    scanner2 = new jpos.Scanner();

    // Initialize the scanner.  Exception thrown if a method fails.
    try {
        scanner.close();
    } catch (JposException e) {
        updateBox(textbox, "=== JPOS EXCEPTION TRACE[1] ===: \n" + e.toString());
        updateBox(textbox, "\n=== END OF EXCEPTION ===\n");
    }
    updateBox(textbox, "\nTrying DLS-QW2100-USB-OEM\n");
    updateBox(textbox, "Adding DataListener...\n");
    scanner2.addDataListener(this);
     try {
        updateBox(textbox, "Opening the device...\n");
        scanner2.open("DLS-QW2100-USB-OEM");
        updateBox(textbox, "Claiming the device...\n");
        scanner2.claim(1000);
        updateBox(textbox, "Enabling the device...\n");
        scanner2.setDeviceEnabled(true);
        updateBox(textbox, "Setting 'DataEventEnabled' property...\n");
        scanner2.setDataEventEnabled(true);
        updateBox(textbox, "---SUCCESS!---\n");
        updateBox(textbox, "[ LISTENING MODE ]");
    } catch (JposException ex2) {
        updateBox(textbox, "=== JPOS EXCEPTION TRACE[1] ===: \n" + ex2.toString());
        updateBox(textbox, "\n=== END OF EXCEPTION ===\n");

    }
    //...Success! Continue doing work...

}


@Override
public void dataOccurred(DataEvent e) {
    jpos.Scanner sc = (jpos.Scanner) e.getSource();
    try {
        updateBox(textbox2, "[" + e.getStatus() + "] " + scanner.getScanData().toString() + "\n");
        sc.setDataEventEnabled(true);
    } catch (JposException ex){
        updateBox(textbox2, "=== JPOS EXCEPTION TRACE[2] ===: \n" + ex.toString());
        updateBox(textbox2, "\n=== END OF EXCEPTION ===\n");
    }

}

Я пропустил метод updateBox (), так как он обновляет только определенное текстовое поле и одновременно выводит на стандартный вывод.

Пара заметок:

  • Я тестирую сканеры QW2100 и QW2120, так как первый тот, который изначально был в драйвере .xml, но второй у моего клиента есть запись, которую я добавил в файл вручную.
  • Я почти уверен, что методы buttonClick () работают нормально, так как раньше у нас были проблемы даже с подключением к устройству (не хватало .dll), но сейчас клиент говорит, что сканер, кажется, подключается, это просто отсканированный номера не отображаются при сканировании карты
  • Я бы лучше подготовил пример с как можно большим количеством решений одновременно, так как у меня нет самого сканера, и я должен полагаться на клиент для меня запустил тестирование
  • Обновления Textbox2 просто отлично, я уже проверил, и это не проблема с кодом updateBox ()

Вот скриншот, который я получил (это из более старой версии, до того как я представил button2Click, но оба ведут себя одинаково): Screenshot Должно быть, я пытаюсь получить данные (сканер отлично работает с другим программным обеспечением, которое они используют в настоящее время), но просматривая документы и т. Д. Я понятия не имею, что может быть не так, когда я пытаюсь сделать минимум.

XML-записи для полноты (2120 - это то, что я добавил):

 <JposEntry logicalName="DLS-QW2100-USB-OEM">
        <creation factoryClass="com.dls.jpos.service.DLSScannerInstanceFactory" serviceClass="com.dls.jpos.service.DLSScannerService"/>
        <vendor name="DLA" url="http://www.adc.datalogic.com"/>
        <jpos category="Scanner" version="1.13"/>
        <product description="ScannerService" name="ScannerService" url="http://www.adc.datalogic.com"/>
        <!--Other non JavaPOS required property (mostly vendor properties and bus specific properties i.e. RS232 )-->
        <prop name="beepDuration" type="String" value="1"/>
        <prop name="beepFrequency" type="String" value="2"/>
        <prop name="beepVolume" type="String" value="2"/>
        <prop name="canAcceptStatisticsCmd" type="String" value="True"/>
        <prop name="canCompareFirmwareVersion" type="String" value="True"/>
        <prop name="canNotifyPowerChange" type="String" value="True"/>
        <prop name="canUpdateFirmware" type="String" value="True"/>
        <prop name="deviceBus" type="String" value="USB"/>
        <prop name="deviceClass" type="String" value="USBHHScanner"/>
        <prop name="deviceDescription" type="String" value="DLS QW2130 USB OEM Scanner"/>
        <prop name="deviceName" type="String" value="DLS QW2130 USB OEM Scanner"/>
        <prop name="doubleReadTimeout" type="String" value="2"/>
        <prop name="enable2DigitSups" type="String" value="False"/>
        <prop name="enable4DigitPriceCheckDigit" type="String" value="False"/>
        <prop name="enable5DigitPriceCheckDigit" type="String" value="False"/>
        <prop name="enable5DigitSups" type="String" value="False"/>
        <prop name="enableBarCodeProgramming" type="String" value="True"/>
        <prop name="enableCodabar" type="String" value="True"/>
        <prop name="enableCode128" type="String" value="True"/>
        <prop name="enableCode128Sups" type="String" value="False"/>
        <prop name="enableCode39" type="String" value="True"/>
        <prop name="enableCode39CheckDigit" type="String" value="False"/>
        <prop name="enableCode93" type="String" value="True"/>
        <prop name="enableEANJAN2LabelDecode" type="String" value="False"/>
        <prop name="enableGoodReadBeep" type="String" value="True"/>
        <prop name="enableInterleaved" type="String" value="True"/>
        <prop name="enableITFCheckDigit" type="String" value="False"/>
        <prop name="enableLaserOnOffSwitch" type="String" value="True"/>
        <prop name="enableUCCEAN128" type="String" value="True"/>
        <prop name="enableUPCACheckDigit" type="String" value="False"/>
        <prop name="enableUPCAtoEAN13Expansion" type="String" value="False"/>
        <prop name="enableUPCD1D5" type="String" value="True"/>
        <prop name="enableUPCEAN" type="String" value="True"/>
        <prop name="enableUPCECheckDigit" type="String" value="False"/>
        <prop name="enableUPCEtoEAN13Expansion" type="String" value="False"/>
        <prop name="enableUPCEtoUPCAExpansion" type="String" value="False"/>
        <prop name="enableVolumeSwitch" type="String" value="True"/>
        <prop name="fullDisable" type="String" value="False"/>
        <prop name="itfLength1" type="String" value="0"/>
        <prop name="itfLength2" type="String" value="0"/>
        <prop name="itfRange" type="String" value="0"/>
        <prop name="laserTimeout" type="String" value="1"/>
        <prop name="ledGoodReadDuration" type="String" value="1"/>
        <prop name="MBeansEnabled" type="String" value="False"/>
        <prop name="motorTimeout" type="String" value="1"/>
        <prop name="productId" type="String" value="1213"/>
        <prop name="scanControl" type="String" value="False"/>
        <prop name="storeLabelSecurityLevel" type="String" value="0"/>
        <prop name="twoItfs" type="String" value="0"/>
        <prop name="usage" type="String" value="4B00"/>
        <prop name="vendorId" type="String" value="05F9"/>
        <prop name="WMIEnabled" type="String" value="False"/>
    </JposEntry>
    <JposEntry logicalName="DLS-QW2120-USB-OEM">
        <creation factoryClass="com.dls.jpos.service.DLSScannerInstanceFactory" serviceClass="com.dls.jpos.service.DLSScannerService"/>
        <vendor name="DLA" url="http://www.adc.datalogic.com"/>
        <jpos category="Scanner" version="1.13"/>
        <product description="ScannerService" name="ScannerService" url="http://www.adc.datalogic.com"/>
        <!--Other non JavaPOS required property (mostly vendor properties and bus specific properties i.e. RS232 )-->
        <prop name="beepDuration" type="String" value="1"/>
        <prop name="beepFrequency" type="String" value="2"/>
        <prop name="beepVolume" type="String" value="2"/>
        <prop name="canAcceptStatisticsCmd" type="String" value="True"/>
        <prop name="canCompareFirmwareVersion" type="String" value="True"/>
        <prop name="canNotifyPowerChange" type="String" value="True"/>
        <prop name="canUpdateFirmware" type="String" value="True"/>
        <prop name="deviceBus" type="String" value="USB"/>
        <prop name="deviceClass" type="String" value="USBHHScanner"/>
        <prop name="deviceDescription" type="String" value="DLS QW2130 USB OEM Scanner"/>
        <prop name="deviceName" type="String" value="DLS QW2130 USB OEM Scanner"/>
        <prop name="doubleReadTimeout" type="String" value="2"/>
        <prop name="enable2DigitSups" type="String" value="False"/>
        <prop name="enable4DigitPriceCheckDigit" type="String" value="False"/>
        <prop name="enable5DigitPriceCheckDigit" type="String" value="False"/>
        <prop name="enable5DigitSups" type="String" value="False"/>
        <prop name="enableBarCodeProgramming" type="String" value="True"/>
        <prop name="enableCodabar" type="String" value="True"/>
        <prop name="enableCode128" type="String" value="True"/>
        <prop name="enableCode128Sups" type="String" value="False"/>
        <prop name="enableCode39" type="String" value="True"/>
        <prop name="enableCode39CheckDigit" type="String" value="False"/>
        <prop name="enableCode93" type="String" value="True"/>
        <prop name="enableEANJAN2LabelDecode" type="String" value="False"/>
        <prop name="enableGoodReadBeep" type="String" value="True"/>
        <prop name="enableInterleaved" type="String" value="True"/>
        <prop name="enableITFCheckDigit" type="String" value="False"/>
        <prop name="enableLaserOnOffSwitch" type="String" value="True"/>
        <prop name="enableUCCEAN128" type="String" value="True"/>
        <prop name="enableUPCACheckDigit" type="String" value="False"/>
        <prop name="enableUPCAtoEAN13Expansion" type="String" value="False"/>
        <prop name="enableUPCD1D5" type="String" value="True"/>
        <prop name="enableUPCEAN" type="String" value="True"/>
        <prop name="enableUPCECheckDigit" type="String" value="False"/>
        <prop name="enableUPCEtoEAN13Expansion" type="String" value="False"/>
        <prop name="enableUPCEtoUPCAExpansion" type="String" value="False"/>
        <prop name="enableVolumeSwitch" type="String" value="True"/>
        <prop name="fullDisable" type="String" value="False"/>
        <prop name="itfLength1" type="String" value="0"/>
        <prop name="itfLength2" type="String" value="0"/>
        <prop name="itfRange" type="String" value="0"/>
        <prop name="laserTimeout" type="String" value="1"/>
        <prop name="ledGoodReadDuration" type="String" value="1"/>
        <prop name="MBeansEnabled" type="String" value="False"/>
        <prop name="motorTimeout" type="String" value="1"/>
        <prop name="productId" type="String" value="1213"/>
        <prop name="scanControl" type="String" value="False"/>
        <prop name="storeLabelSecurityLevel" type="String" value="0"/>
        <prop name="twoItfs" type="String" value="0"/>
        <prop name="usage" type="String" value="4B00"/>
        <prop name="vendorId" type="String" value="05F9"/>
        <prop name="WMIEnabled" type="String" value="False"/>
    </JposEntry>

Спасибо.

...