Question

Mes amis et moi avons écrit un programme en Java avec une interface graphique, conçu pour les terminaux à écran tactile sans clavier / souris. Tout se produit dans l'interface graphique, et la majeure partie de l'entrée est une appuye sur le bouton. Nous voulons attacher un lecteur de carte magnétique (en mode clavier) et lire à partir d'une carte, puis effectuer un traitement en fonction des données.

J'ai écrit une classe qui fonctionne dans la console, mais lorsqu'elle est exécutée dans l'interface graphique, elle s'accroche jusqu'à l'onglet alt + et cliquez dans la console de l'IDE (Eclipse) et glissez la carte. Ce que je recherche, c'est un moyen d'obtenir cette contribution sans laisser l'interface graphique.

Le MCR fonctionne comme si vous avez simplement tapé les informations sur la carte sur un clavier - il enverra une ligne contenant les deux pistes des données partout où vous pourriez taper la même ligne, le même document TXT, la console, peu importe.

Le code pertinent est le suivant:

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 */
    }
}    

Dans l'interface graphique, le code est simplement:

cardreadbtn.addActionListener(new ActionListener() {

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

Je pensais que peut-être qu'un INTROWSTREAM fonctionnerait, mais je n'ai jamais vraiment travaillé avec eux. J'ai googlé et j'ai trouvé çafil de discussion : J'ai essayé d'intégrer la suggestion sur les ioutils, comme suit:

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);

Je ne sais pas si je fais bien, mais dans la console (je n'ai pas essayé dans l'interface graphique), il dit maintenant "carte de numérisation" et ne progresse jamais pour imprimer Raw_card_data ou faire autre chose. "étroitement" je suis sorti de ici:

... Mais encore une fois, je ne sais pas si je le fais bien. Je n'ai jamais travaillé avec Apache Ioutils non plus.

Alors je suis coincé et je vous regarde les gars. Comment puis-je récupérer ces données de carte sans laisser l'interface graphique pour le faire?

Remarque importante: Les données de la carte ont un # variable d'espaces en elle (que nous devons préserver), donc tout ce qui est Scanner.Next () ne fonctionnera pas. Le lecteur de carte est configuré pour envoyer une ligne avec les deux pistes séparées par les délimiteurs, puis un retour en chariot, donc .NextLine () fonctionne. Les données de la carte sont également une variable # d'octets / caractères.

Aussi: Dans le premier bloc de code, le System.out.println est avant une boucle de faire pendant que Raw_card_data = read.nextline () est en fait (je l'ai laissé de côté parce que je pensais que ce n'était pas pertinent, mais maintenant je suis curieux de savoir pourquoi ça fait ça). Lorsque la println est changée en un setText () pour s'afficher sur une jtexarea dans l'interface graphique, elle ne s'affiche qu'après la saisie des données de la carte dans la console, même si elle se produit avant le DO pendant et devrait s'exécuter avant elle. Je ne comprends pas lol.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top