witam, od jakiegoś czasu uczę się javy przy wykorzstaniu spring boot, do budowaniu aplikacji webowych ale wpadł mi temat zrobienia "prostej" apki desktopowej.
Apka ma posłużyc do tworzenia logów ze skanowania kodów kreskowych za pomocą czytników kodów kreskowych (gun laserowy na usb) )
Logi ze skanów mają być wyświetlane przy użyciu prostego okna np Jframe oraz Jtextfield
Znalazłem podobny problem na stack overflow i "rozwiązanie" poniżej
Rozumie go w 80%, ale nie umię iterować po liście listeners(CopyOnWriteArrayList) i przekazać jej elementy do GUI
W klasie zagnieżdzony jest interface ale nic nie zwracający.
Potrzebuje drobnej pomocy, wskazówek od czego zacząć na zasadzie kroków.
'''public class BarcodeReader {
private static final long THRESHOLD = 100;
private static final int MIN_BARCODE_LENGTH = 8;
private final StringBuffer barcode = new StringBuffer();
private final List<BarcodeListener> listeners = new CopyOnWriteArrayList<BarcodeListener>();
private long lastEventTimeStamp = 0L;
public interface BarcodeListener {
void onBarcodeRead(String barcode);
}
public BarcodeReader() {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() != KeyEvent.KEY_RELEASED) {
return false;
}
if (e.getWhen() - lastEventTimeStamp > THRESHOLD) {
barcode.delete(0, barcode.length());
}
lastEventTimeStamp = e.getWhen();
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
if (barcode.length() >= MIN_BARCODE_LENGTH) {
fireBarcode(barcode.toString());
}
barcode.delete(0, barcode.length());
} else {
barcode.append(e.getKeyChar());
}
return false;
}
});
}
protected void fireBarcode(String barcode) {
for (BarcodeListener listener : listeners) {
listener.onBarcodeRead(barcode);
}
}
public void addBarcodeListener(BarcodeListener listener) {
listeners.add(listener);
}
public void removeBarcodeListener(BarcodeListener listener) {
listeners.remove(listener);
}
}'''