gpt4 book ai didi

java - jTable swing获取输入问题

转载 作者:行者123 更新时间:2023-12-01 15:54:29 24 4
gpt4 key购买 nike

我有 getInput 方法,可以在单击输入时从文本字段中获取字符串。我创建了 while 循环来等待 onClickListener 返回 true (按 Enter 键)。这是我的代码:

public String getInput(){
jTextField1.setEditable(true);
jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
temp=jTextField1KeyPressed(evt);
};
});
while(!(temp)){
}
temp=false;
jTextField1.setEditable(false);
String s= jTextField1.getText();
jTextField1.setText("");
return s;

}

private boolean jTextField1KeyPressed(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER)
return true;
else return false;
};

现在我有一个非常奇怪的问题:如果我在 while 循环中添加 System.out.println 语句,它可以正常工作,如果我删除它,while 循环永远不会退出。问题出在哪里?提前致谢。

最佳答案

您需要一些同步,以便对 temp 的更改传播到所有必需的线程。但这是一个糟糕的开始方法 - getInput 会在 while 中浪费大量 CPU 循环,没有任何好处。

你可以做得更干净。首先,将 temp 声明为 java.lang.Object,并将其初始化为普通的旧对象:

private Object temp = new Object();

(或类似的东西。)

在 getInput 中,而不是这样:

while (!temp) { }
temp = false;

把这个:

synchronized (temp) {
try {
temp.wait();
} catch (InterruptedException ie) {
// handle this situation: something interrupted your thread before input was finished
}
}

在事件处理程序中:

synchronized (temp) {
temp.notify();
}

这样,运行 getInput 的线程就会保持 sleep 状态,等待某些事情发生,而不是消耗 CPU 周期。

还有一些采用超时值的 wait() 变体。您可能也有兴趣使用它们。

关于java - jTable swing获取输入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5361774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com