在我的代码中,我已将我的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);
}
}
答案 0 :(得分:1)
请注意,我们无法编译或运行代码段,因此给出的任何答案都必须包含猜测,但是,话虽如此,我认为问题在于您在这里有错误的假设:
//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
-是吗?