Я пытался заставить 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>
Спасибо.