Domanda

Io e i miei amici abbiamo scritto un programma in Java con una GUI, realizzato per terminali touchscreen senza tastiera/mouse. Tutto si verifica all'interno della GUI e la maggior parte dell'input è la pressione del pulsante. Vogliamo collegare un lettore di schede magnetiche (in modalità tastiera) e leggere da una scheda, quindi eseguire l'elaborazione in base ai dati da esso.

Ho scritto una lezione che funziona nella console, ma quando ho eseguito la GUI si blocca fino a quando non ho tab e fai clic all'interno della console IDE (Eclipse's) e scorre la scheda. Quello che sto cercando è un modo per ottenere questo input w/o di dover lasciare la GUI.

L'MCR funziona come se avessi semplicemente digitato le informazioni sulla scheda su una tastiera: invierà una riga contenente entrambe le tracce di dati ovunque sia possibile digitare la stessa riga, documento txt, console, qualunque cosa.

Il codice pertinente è il seguente:

import java.util.Scanner;

public class CardRead {
    public static void main() 
    {
    String raw_card_data = "";

    Scanner read = new Scanner( System.in );
    System.out.println("Scan card"); // changed to an outputArea.setText for GUI

    raw_card_data = read.nextLine(); // works in console, not within GUI

    /* insert processing here */
    }
}    

Nella GUI, il codice è semplicemente:

cardreadbtn.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e)
        {
            CardRead.main();
        }
    }); 

Ho pensato che forse un inputstream avrebbe funzionato, ma non ho mai lavorato con loro. Ho cercato su Google e l'ho trovatofilo : Ho provato a integrare il suggerimento su Ioutils, come segue:

InputStream is = System.in;
StringWriter writer = new StringWriter();
IOUtils.copy(is, writer, null);
raw_card_data = writer.toString();
System.out.println(raw_card_data);
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(writer);

Non so se lo sto facendo bene, ma nella console (non ho provato nella GUI), ora dice "Scansione" e non progredisce mai per stampare raw_card_data o fare altro. "Closequietly" ho ricevuto da qui:

... ma di nuovo, non so se lo sto facendo bene. Non ho mai lavorato con Apache Ioutils.

Quindi sono bloccato e sto guardando voi ragazzi. Come posso prendere questi dati della scheda senza che lascia la GUI per farlo?

Nota importante: i dati della scheda hanno un numero variabile di spazi (che dobbiamo conservare), quindi qualcosa come scanner.next () non funzionerà. Il lettore di schede viene impostato per inviare una riga con entrambe le tracce separate da delimitatori e quindi un ritorno a trasporto, quindi. Nextline () funziona. I dati della scheda sono anche un numero variabile di byte/caratteri.

Inoltre: nel primo blocco di codice, System.out.println è prima di un loop che raw_card_data = read.nextline () è effettivamente dentro (l'ho lasciato fuori perché sentivo che non è rilevante, ma ora sono curioso di sapere perché sta facendo questo). Quando la stampa viene modificata in un setText () per visualizzare in una JTextArea nella GUI, non viene visualizzata fino a quando i dati della scheda non vengono inseriti nella console, anche se si verifica prima del fatto di fare mentre si eseguono prima. Non capisco, lol.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top