我希望建立一个搜索功能,当用户输入完成后,即可显示结果。
如果我要在本地软件库中进行搜索,我会每次用户释放按键时触发搜索。
在我的情况下,我需要向公开搜索功能的API点发送Web请求。该服务器每分钟仅允许来自单个IP的20个请求。
因此,我编写了一个线程来检测用户何时真正完成写作:
- (while true) - 保存搜索框的文本 - 等待400毫秒 - 检查搜索框的文本是否与之前保存的文本相同
代码:
如果我要在本地软件库中进行搜索,我会每次用户释放按键时触发搜索。
在我的情况下,我需要向公开搜索功能的API点发送Web请求。该服务器每分钟仅允许来自单个IP的20个请求。
因此,我编写了一个线程来检测用户何时真正完成写作:
- (while true) - 保存搜索框的文本 - 等待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毫秒运行一次。
我该如何修复这个算法?