java - 如何将 JTextArea 字符串更改为其他内容
问题描述
在我的代码中,我公开了我的 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);
}
}
解决方案
请注意,我们无法编译或运行代码片段,因此给出的任何答案都需要包括猜测,但话虽如此,我认为问题在于您在这里有一个错误的假设:
//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行正在更改其状态(保存在其文本组件之一中的文本)。如果我的猜测是正确的,那么更好的解决方案是更改实际显示的登录对象的状态,而不是您在此方法中创建的新的和不同的对象。这个怎么做?无法说出您迄今为止提供的信息。
如果您想要一个更可靠的答案,那么您需要在您的问题中创建并发布一个有效的 [Minimal, Complete, and Verifiable example](Minimal, Complete, and Verifiable example)——请查看链接解释一切。
其他不相关的问题:
- 你的问题提到
JTextArea
了,但代码表明我们正在处理JTextField
- 这是它? - 您的问题文本表明您正在将扫描仪/控制台输入与 Swing GUI 混合。如果是这样,我强烈建议您不要走这条路,通过 GUI 获取所有输入。这将为您节省数小时的调试和挫败感。