У меня есть MouseListener тема, где этот метод вызывается каждый раз, когда есть щелчок:делают эффективного внедрение этого Java MouseListener Logic
public void mousePressed(MouseEvent event){
//my Logic here
}
Теперь, что происходит, что есть так много кликов в короткое время, в то время как моя логика здесь занимает больше времени для обработки. Я ожидал, что дальнейшие клики будут отброшены, и этот метод будет продолжен по последним предстоящим кликам.
Но то, что происходит, когда логика обрабатывается, входящие клики поставлены в очередь, и даже когда клик остановлен, qued клики продолжают называть этот метод mousePressed, в результате у меня есть несколько отложенных исполнений.
К сожалению, у меня нет контроля над слушателем (почему он задает вопросы и продолжает отправлять задержанные клики), поэтому в таком сценарии вы можете рассказать мне, что является эффективным способом обработки, так что я не делаю очереди для задержки в моей обработке.
Я думаю, что самый очевидный способ - использовать другой поток, но мне интересно, что это может вызвать столько потоков за меньшее время, или есть ли способ заблокировать только один поток, в то время как остальные клики просто пройдут через пустые цикл?
Возможно, вы захотите подражать тому, как Swing обрабатывает запросы на перерисовку - он игнорирует запросы, когда они складываются. Пожалуйста, посмотрите здесь более подробно: [Живопись в AWT и Swing] (http://java.sun.com/products/jfc/tsc/articles/painting/). И да, я думаю, что независимо от того, вы захотите использовать фоновый поток, возможно, пул потоков. –
@HovercraftFullOfEels, это метод JNI, где фактический прослушиватель мыши находится из собственного кода, в котором нет Swing. – Johnydep
Хорошо, если я просто начинаю новый поток, а затем вызываю метод, по крайней мере, я не пропущу ни одного щелчка, хотя все же результаты задерживаются и во многих параллельных потоках я предполагаю, что использование какого-то летучего булевского флага может быть ответом, полагаю, что так. – Johnydep