Pregunta

Mis amigos y yo hemos escrito un programa en Java con una GUI, hecho para terminales de pantalla táctil sin teclado/mouse. Todo ocurre dentro de la GUI, y la mayor parte de la entrada es presionada del botón. Queremos adjuntar un lector de tarjetas magnéticas (en modo de teclado) y leer desde una tarjeta, luego realizar el procesamiento en función de los datos de él.

Escribí una clase que funciona en la consola, pero cuando se ejecuta a través de la GUI, solo cuelga hasta que I ALT+Tab y haga clic dentro de la consola IDE (Eclipse) y deslice la tarjeta. Lo que estoy buscando es una forma de obtener esta entrada sin tener que dejar la GUI.

El MCR funciona como si simplemente escribiera la información de la tarjeta en un teclado: enviará una línea que contenga ambas pistas de datos en cualquier lugar donde pueda escribir la misma línea, documento TXT, consola, lo que sea.

El código relevante es el siguiente:

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

En la GUI, el código es simplemente:

cardreadbtn.addActionListener(new ActionListener() {

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

Pensé que tal vez un InputStream funcionaría, pero nunca he trabajado realmente con ellos. Busqué en Google y encontré estohilo : Intenté integrar la sugerencia sobre Ioutils, como sigue:

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

No sé si estoy haciendo eso bien, pero en la consola (no he intentado en la GUI), ahora dice "tarjeta de escaneo" y nunca progresa para imprimir RAW_CARD_DATA o hacer cualquier otra cosa. "Closequiety" que obtuve de aquí:

... Pero de nuevo, no sé si lo hago bien. Nunca trabajé con Apache Ioutils tampoco.

Así que estoy atascado y los estoy mirando a ustedes. ¿Cómo puedo obtener los datos de esta tarjeta sin dejar la GUI para hacerlo?

Nota importante: los datos de la tarjeta tienen una variable # de espacios (que necesitamos preservar), por lo que cualquier cosa como Scanner.next () no funcionará. El lector de tarjetas está configurado para enviar una línea con ambas pistas separadas por delimitadores y luego un retorno de carro, por lo que funciona .nextline (). Los datos de la tarjeta también son una variable # de bytes/caracteres.

Además: en el primer bloque de código, el sistema.out.println es antes de un bucle de hacer que RAW_CARD_DATA = read.nextline () realmente está adentro (lo dejé porque sentí que no es relevante, pero ahora tengo curiosidad por qué está haciendo esto). Cuando la impresión se cambia a un setText () para mostrar a un jtexTarea en la GUI, no se muestra hasta que los datos de la tarjeta se ingresan en la consola, a pesar de que ocurre antes del tiempo y debe ejecutar antes. No entiendo lol.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top