Как отобразить в Java jTextField данные из Arduino RFID - PullRequest
0 голосов
/ 25 января 2019

У меня есть проблема в моей системе, когда при сканировании карты на RFID она отображает UID с использованием System.out.println(str);, но когда я передал его через jTextField.setText(str);, он не отображает UID. Кроме того, странная часть, когда я пытаюсь System.out.println(jTextField.getText());, он отображает UID.

Может кто-нибудь помочь мне с этой проблемой? И объясните, если возможно, почему это происходит?

Это мой основной класс:

public class IDSystem {

  public static String devicePortName = "Arduino Uno";
  public static SerialPort arduinoPort = null;
  public static InputStream arduinoStream = null;
  public static int PACKET_SIZE_IN_BYTES = 8;

  public static void main(String[] args) {

    int len = SerialPort.getCommPorts().length;
    SerialPort serialPorts[] = new SerialPort[len];
    serialPorts = SerialPort.getCommPorts();

    for (int i = 0; i < len; i++) {

      String portName = serialPorts[i].getDescriptivePortName();
      if (portName.contains(devicePortName)) {
        arduinoPort = serialPorts[i];
        arduinoPort.openPort();
        break;
      }
    }

    PacketListener listener = new PacketListener();
    arduinoPort.addDataListener(listener);

    Login l = new Login();
    l.setVisible(true);
 }

}

Это мой PacketListener класс:

public final class PacketListener implements SerialPortPacketListener {

  String ex = "/";
  String id;

  @Override
  public int getPacketSize() {
    return IDSystem.PACKET_SIZE_IN_BYTES;
  }

  @Override
  public int getListeningEvents() {
    return SerialPort.LISTENING_EVENT_DATA_RECEIVED;
  }

  @Override
  public void serialEvent(SerialPortEvent event) {

    byte[] newData = event.getReceivedData();
    String str = new String(newData).split("\n", 2)[0].replaceAll("\\s+", "");

    int byteSize = 0;
    try {
        byteSize = str.getBytes("UTF-8").length;
    } catch (UnsupportedEncodingException ex) {
        Logger.getLogger(PacketListener.class.getName()).log(Level.SEVERE, null, ex);
    }

    if (byteSize == IDSystem.PACKET_SIZE_IN_BYTES) {

        System.out.println(str);
        Login l = new Login();
        l.jTextField.setText(l.jTextField.getText() + str);
        System.out.println(l.jTextField.getText());
    }

  }

}

1 Ответ

0 голосов
/ 25 января 2019

Я предполагаю, что ваше jtextfield является экземпляром javax.swing.JTextField.

Если он не отображает указанный вами текст, убедитесь, что:

  • Youустанавливаем текст для правильного экземпляра JTextField,
  • Вы добавляете правильный экземпляр JTextField в контейнер (JPanel и т. д.), который отображается.
  • В качестве последнего средства,если это потому, что вы добавили экземпляр JTextField в его контейнер после того, как контейнер уже отображался на экране, попробуйте container.validate ();container.repaint ();,

Если бы вы могли показать код для вашего класса Login и то, как ваше поле jtext добавляется в контейнер и отображается на экране, что поможет в диагностике проблемы.

...