일부 운영 체제에서는 응용 프로그램이 처리 할 수있는 것보다 빠르게 keyPressed 이벤트를 생성합니다. 내 첫번째 생각은 통화가 서로 너무 가까운 경우이 같은으로 작업을 수행 할 것이었다 : 자바 스윙 애플리케이션에 빠른 키 속도가 적용되면 어떻게 파이프 라인에서 이벤트를 일찍 삭제할 수 있습니까?
public void actionPerformed(ActionEvent e) {
long now = System.currentTimeMillis();
if(now - lastCall < 150) {
System.out.println("dropping event");
}
else {
lastCall = now;
}
}
불행하게도 이벤트 낙하에도 불구하고, 응용 프로그램이 여전히 잠그고 큐에서 이벤트의 톤을 구축합니다. 낮은 수준에서 이벤트를 삭제할 수있는 방법이 있습니까? 나는 그들이 위의 저의 청취자에게 다가 갈 때까지 응용 프로그램을 잠그지 않고 저장하는 것은 너무 늦었다 고 생각합니다. 도움 주셔서 감사합니다.
편집 : 또한 리스너가 메뉴 항목과 연결된 AbstractAction의 일부임을 언급해야합니다.
응용 프로그램이 keyPressed 이벤트를 처리 할 수없는 이유가 있습니까? 이벤트 처리기에서 장기 실행중인 작업을 수행하고 있습니까? 이벤트 처리 코드가 어떤 모양인지 알 수 있다면 도움이 될 것입니다. – justkt
브라이언 Agnew에게 내 코멘트를 참조하십시오. 전체 "작업"을 단일 인쇄 줄로 바꾼다고해도 여전히 문제가 발생합니다. 이벤트는 대기열에 쌓여서 처리기에 도착하는 데 시간이 걸리는 것처럼 보입니다. 그들이 도착할 때까지 이미 잠금이 발생하고 빠른 동작 코드를 사용하거나 이벤트를 삭제/통합하는 것이 중요하지 않습니다! –
최소한의 예제에서 잠금 동작을 재현 할 수 있습니까? 이 동작을 나타내는 운영 체제는 무엇입니까? –