Как я могу изменить строку JTextArea на что-то другое - PullRequest
0 голосов
/ 31 марта 2019

В моем коде я сделал общедоступной JtextArea, а в своем коде я вызвал jtextare и setTextArea, однако, когда я нажимаю эту кнопку, потому что это поток, он не позволяет мне изменять JTextArea всякий раз, когда работает мой сканер

 public void scan() throws InterruptedException {
    try {

        //This is the part i called it but doesnt change the jtextfield into getUid
        Login login = new Login();
        login.jTextField_username.setText(getUid);

        TerminalFactory factory = TerminalFactory.getDefault();
        List<CardTerminal> terminals = factory.terminals().list();
        System.out.println("Terminals: " + terminals);

        CardTerminal terminal = terminals.get(0);

        System.out.println("Waiting for a card..");
        if (terminal == null) {
            return;
        }
        terminal.waitForCardPresent(0);

        Card card = terminal.connect("T=1");
        System.out.println("Card: " + card);
        System.out.println("Protocol: " + card.getProtocol());
        CardChannel channel = card.getBasicChannel();

        ResponseAPDU response = channel.transmit(new CommandAPDU(new byte[]{(byte) 0xFF, (byte) 0xCA, (byte) 0x00, (byte) 0x00, (byte) 0x00}));
        System.out.println("Response: " + response.toString());
        if (response.getSW1() == 0x63 && response.getSW2() == 0x00) {
            System.out.println("Failed");
        }
        System.out.println("UID: " + bin2hex(response.getData()));

        getUid = bin2hex(response.getData());

    } catch (CardException ex) {
        Logger.getLogger(CardId.class.getName()).log(Level.SEVERE, null, ex);
    }
}

1 Ответ

1 голос
/ 31 марта 2019

Обратите внимание, что мы не можем ни скомпилировать, ни запустить фрагмент кода, и поэтому любой ответ должен включать догадки, но, как говорится, я думаю, что проблема заключается в том, что у вас ошибочное предположение:

//This is the part i called it but doesnt change the jtextfield into getUid
Login login = new Login();         // **** A ****
login.jTextField_username.setText(getUid);  // **** B ****

В строке A вы создаете новый объект Login, но является ли он фактически отображаемым объектом?У меня такое ощущение, что это не так, что вы уже создали и отобразили окно входа в систему, а теперь создаете новое, которое никогда не отображалось, и в строке B меняют его состояние (текст хранитсяв одном из его текстовых компонентов).Если мои предположения верны, то лучшим решением будет изменение состояния отображаемого объекта Login, а не нового и отличного объекта, который вы создаете в этом методе.Как это сделать?Невозможно указать, какую информацию вы уже дали.

Если вы хотите получить более надежный ответ, вам нужно создать и опубликовать действительный пример [Минимальный, Полный и Проверяемый] (Минимальный,Полный и проверяемый пример) в вашем вопросе - пожалуйста, проверьте ссылку, так как она объяснит все.

Другие не связанные с этим вопросы:

  • Ваш вопрос упоминает JTextArea, нокод предполагает, что мы имеем дело с JTextField - что это?
  • Текст вашего вопроса предполагает, что вы смешиваете ввод со сканера / консоли с графическим интерфейсом Swing.Если это так, я настоятельно призываю вас не идти по этому пути, чтобы получить все входные данные через графический интерфейс.Это сэкономит вам часы отладки и разочарования.
...