Java KeyListener с задержкой

#java #delay #keylistener

#java #задержка #keylistener

Вопрос:

Мне нужна помощь в реализации новой функции в существующем продукте, который реализован с использованием JAVA. Новая функция позволит пользователям искать элементы в базе данных и отображать их в Jtable. Критерии поиска будут введены в текстовое поле, и соответствующие результаты должны соответственно появиться в таблице. Я могу легко создать кнопку «Отправить», чтобы отправить критерии поиска и получить результаты. Но чего я действительно хочу, так это реализовать keylistener в текстовом поле, который будет ждать около 2 секунд перед отправкой запроса. Например, если пользователь вводит «D» и ожидает 1 секунду, а затем вводит «O», отправка запроса произойдет через 2 секунды после ввода «O» (возобновляя время задержки при каждом нажатии клавиши). Может

Комментарии:

1. Вы уверены, что ваш запрос достаточно быстр, чтобы обрабатывать такие вещи?

2. Даже если бы были дополнительные накладные расходы на запрос, что меня действительно волнует, так это ожидание в течение 2 секунд, прежде чем принимать входные данные из текстового поля и отображать их в моей JTable.

3. 1) Пишется Java, а не JAVA. 2) В чем ваш вопрос?

Ответ №1:

Попробуйте java.util.Таймер, при каждом нажатии клавиши отмените его и перепланируйте временную задачу, которая должна выполнить ваш запрос.

Комментарии:

1. Большое спасибо, Том. Я попробую ваше предложение и дам вам отзыв, как только закончу.

2. Я попытался использовать TimerTask, и это работает (я получаю результат через X секунд). Но давайте предположим, что у меня есть задача, которая все еще ожидает времени задержки до ее выполнения, и во время этого выполняется другая задача. Как я могу полностью отменить предыдущую задачу, чтобы я мог выполнить только новую задачу? Я попробовал timer.cancel(), но это запретило бы мне повторно использовать объект класса Timer.

3. О, так вы предлагали создать таймер для каждой задачи?

4. Неважно, я выполнил следующую логику: void run(){ timer.cancel(); timer=new Timer(); //Бизнес-логика переходит сюда } Это отменит предыдущий таймер и создаст новый таймер для новой задачи. Спасибо всем за помощь =)