Aplikacja kadrowa z obsługą czytnika kodów kreskowych.

0

Witam. Jak w temacie mam za zadanie zrobić taką aplikację (nie musi być to żaden kombajn multimedialny) ma po prostu działać. Ogólnie programuję w samej Javie więc jest troszkę zabawy. Bazy danych nie są problemem tutaj wszystko w miarę u mnie funkcjonuje zrobienie gui i podłączenia aplikacji do bazy danych też potrafię. Pytanie rodzi się w momencie w którym dochodzę do obsługi czytnika kodów kreskowych. Mam taki tani na USB działa tak że gdzie stoi kursor tam wyrzuca ciąg znaków. Czytnik ma być wykorzystany do monitoringu czasu pracy pracowników (przychodząc do pracy skanuje kartę, wychodząc również i te godziny dodają się do bazy danych). Próbowałem już różnych rozwiązań ale niezbyt mnie satysfakcjonują. Otóż żeby kod trafił do aplikacji pracownik podczas skanowania musiałby nacisnąć jakiś przycisk na klawiaturze, trochę bez sensu. Czy istnieje jakieś zdarzenie, metoda albo coś co nasłuchiwałoby port usb i w momencie w którym pojawiłby się tam nasz kod wrzuciłby go samoistnie ? Chodzi o to żeby nie musieć robić nic poza skanowaniem kodu.
Pozdrawiam i z góry dzięki za odpowiedzi :)

0

musisz poszukać dokumentacji czy czytnik da się przełączyć w tryb USB albo RS232. Teraz działa jako klawiaturowy i musisz go traktować tak jakby ktoś te znaki z klawiatury wpisywał. Podaj model czytnika to zobacze co da się zrobić

0

Czytnik to: HDWR HD67. Prosta konstrukcja za niecałe 100zł przewodowy pod USB.

0

Cześć

Miałem podobny problem do rozwiązania, a właściwie okazało się że problemu w ogóle nie było - wszystkie czytniki jakie miałem okazję przetestować w firmie - nawet te najstarsze, dawały możliwość dołączania kilku różnych znaków na końcu zaczytanego stringu. Tzn czytnik odczytuje kod kreskowy, zmienia go w znaki, dodaje na końcu dodatkowy znak np ENTER (ale równie popularny jest TAB) i dopiero wtedy wysyła tak przygotowany ciąg do komputera.
Sprawdź dokumentację czytnika - na 99% twój czytnik może dodawać dodatkowy znak na końcu zaczytanego ciągu znaków, ustawiany kodami serwisowymi - tzn w instrukcji czytnika masz kody kreskowe które po zaczytaniu, zmuszają czytnik do zmiany jego wewnętrznych ustawień.
Ten dodatkowy znak będzie triggerem dla twojej metody odczytującej string.

Co do samego kodu to ja robię to najprościej jak się da:

  1. Ustawiam swój czytnik kodów kreskowych, tak aby dodawał do zaczytanego ciągu znaków, ENTER
  2. Tworzę textField - nie musi być widoczny jeżeli nie chcesz żeby użytkownicy widzieli "mechanikę" programu
  3. Dodaję do niego keyEvent

AWT

@Override
public void keyPressed(KeyEvent e1)
{

	int keyCode = e1.getKeyCode();
	
	if (keyCode == KeyEvent.VK_ENTER)
	{
		TwojaMetoda();
	}
   }

albo w JavaFX

@FXML
void OnKeyPressed(KeyEvent event)
{
if (event.getCode() == KeyCode.ENTER)
{
TwojaMetoda();
}

  1. Czyszczę textField i ustawiam na nim focus

Swing
textField.setText="";
textField.requestFocusInWindow();

JavaFX
textField.clear;
textField.requestFocus();

  1. Użytkownik zaczytuje swoją kartę - do textFielda dodawane są znaki, do momentu aż pojawi się tam końcowy (dodany przez sam czytnik) znak ENTER - w tym momencie reaguje KeyEvent i wywołuje TwojaMetoda()

  2. TwojaMetoda() pobiera SN karty użytkownika z textField dodaje czas, id użytkownika itd. i wrzuca to do bazy danych.

  3. Po wykonaniu poprzedniego punktu TwojaMetoda() czyści textField i ponownie ustawia na nim focus.

i tak aż do zakończenia programu - przetestowane - działa.

0

https://sklep.hdwr.pl/pl/p/file/882786decb4e57551356265bbe89b523/Instrukcja-obslugi-POLSKA-HD67.pdf

na czwartej stronie tej instrukcji jest kod o nazwie "wstaw ENTER za kodem" - tylko za nim go użyjesz upewnij się że nie jest już domyślnie ustawiony - ja testuję czytnik na zwykłym notepadzie

0

Dzięki wielkie!!! Jesteście genialni :) Powalczę pod koniec tyg i napiszę jak mi poszło !! :)

0

@mic gorzej jak user focusa ustawi dla innej kontrolki...

0

No właśnie pojawiło się w głowie światełko które nakazuje mi zadać inne pytanie :P Czy jest możliwość ustawienia focusu tak aby nie kolidował z pracą całej aplikacji? Tzn bo z tego co rozumiem podczas odczytywania kodu nie będzie można zrobić na niej niczego więcej bo focus będzie ustawiony na ten 1 przycisk tak? Czy coś błędnie rozumiem? Nie chciałbym usypiać aplikacji na czas odczytywania kodu.

0

nie wiem jak będzie zbudowana aplikacja ale rozumiem że pracownik wchodzi do pracy zaczytuje kartę i idzie dalej - w czasie zaczytania musi widzieć tylko jakiś monitor lub (diody led informacyjne), który pokaże czy zaczytanie było skuteczne czy musi powtórzyć - oprócz czytnika kodów kreskowych użytkownik nie będzie miał innych możliwości inputu więc tylko program będzie decydował o fokusie. No a to by wskazywało że będzie do tego wydzielony komp i stale na nim działająca aplikacja stand-alone lub webowa?
Możesz dodać keyListener do texFielda, albo dodać keyEvent do okna programu ale ograniczyć jego działa tylko do textFielda np tak:
if (keyCode == KeyEvent.VK_ENTER && textField.isFocused())
Możesz też w ogóle wrzucić całą funkcję zaczytywania do oddzielnego wątku.

0

Wszystko pięknie działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1