gpt4 book ai didi

java - 检测用户何时完成写入 - 在循环中调用 Thread.sleep()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:00 36 4
gpt4 key购买 nike

我想构建一个搜索,在用户完成写作时向您显示结果。

如果我必须在本地数据库中搜索,我会在用户每次释放按键时触发搜索。

在我的例子中,我必须将 Web 请求发送到公开搜索功能的 API 点。服务器每分钟仅允许来自单个 IP 的 20 个请求。

因此,我编写了一个线程来检测用户何时真正完成写入:

  • (如果为真)
  • 保存搜索框文本
  • 等待 400 毫秒
  • 检查搜索框文本是否与之前保存的相同

代码:

private void checkIfUserFinishedWritingFunction() {
while(true) {
String previousText = textField.getText();

try {
Thread.sleep(400);
} catch (InterruptedException ex) {
return;
}

String actualText = textField.getText();

//WHEN USER FINISHED WRITING...
if(previousText.equals(actualText)) {
//IF SEARCHBOX ISN'T EMPTY
if(!textField.getText().trim().isEmpty()) {
//START A THREAD THAT SENDS WEB REQUEST
}
//IF SEARCHBOX IS EMPTY...
else {
//HIDE RESULTS POPUP
if(resultsList.isShowing())
resultsList.hide();
}
return;
}}}

NetBeans 告诉我在循环中调用的 Thread.sleep() 可能很危险。我认为这是因为成本,在我的循环中每 400 毫秒运行一次。

我该如何修正这个算法?

最佳答案

I think it's because of the cost, and in my the loop runs every 400ms.

其实是因为当你在基于GUI的应用程序中调用sleep时,你很容易导致事件监听线程卡住。

(如果这不在事件监听器线程上,则调用 hide 可能是线程安全隐患。)

更好的替代方法是结合使用事件监听器来关注自上次发送查询以来的时间的文本框更新事件,以及类似 ScheduledExecutorService 的内容。

关于java - 检测用户何时完成写入 - 在循环中调用 Thread.sleep(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33477590/

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