2013-02-20 5 views
1

본질적으로 수많은 테이블을 새로 고치는 전자 콘센트 어댑터가 있습니다. 이론적으로 모든 알림을 테이블에서 새로 고침해야하는 정확한 알림으로 필터링 할 수는 있지만 엄청난 모델과 많은 이벤트 및 변경 사항이있을 수 있으므로 매우 어렵고 시간이 많이 걸릴 것입니다. 새롭게 하다. 또한 종종 발생하는 것은 하나의 "사용자 이벤트"(예 : 응용 프로그램의 상태 -> 새 클릭)와 같이 장면 뒤에서 생성되는 4 개의 객체를 트리거합니다. 모두 알림 관점과 매우 유사하므로 어려움을 겪습니다. 필터 아웃. 4 가지 알림 만 단일 새로 고침을 일으킬 수 있도록 일종의 "지연된 작업"을 수행하는 좋은 방법이 있는지 궁금합니다. 예를 들어, 비슷한 : 누군가가이 일을 적절한 방법이 무엇인지에 도움을 줄 수 있다면 매우 도움이 될 것입니다, 그래서EContentAdapter에서 UI를 업데이트하는 올바른 방법

public void notifyChanged(final Notification notification) 
    super.notifyChanged(notification); 
    @Override 
    public void run() { 
     if(matchesFilters(notification)) { 
      //some sort of check to see if we recently had another event that would have triggered a refresh? 
      if(!schedulingJob) { 
       scheduleDelayedJob(); 
      } 
     } 
    } 
} 

불행하게도 나는, 그런 직업과 일에 약간의 경험이 있습니다.

또 다른 예를 들면 누군가가 우리의 응용 프로그램에서 control-N 20 번을 매우 빠르게 친다면 20 개의 새로운 상태를 빠르게 만들 것이며 새로 고치지 않고 20 개의 알림이 끝날 때 UI를 업데이트하기를 원할 것입니다 20 번.

답변

0

올바르게 이해하면 Eclipse에서 필요한 모든 것을 제공합니다. 첫째, GUI는 디스플레이 스레드에서 업데이트되어야합니다.

final IWorkbench workbench = PlatformUI.getWorkbench(); 
workbench.getDisplay().asyncExec(new Runnable() { 
    public void run() { 
    // Do your thing, e.g. refresh() 
    } 
}); 

는 당신이 러너에서 할 것은 GUI 프레임 워크에 따라 다음과 같이 둘째, 비동기 실행을위한 방법이있다. JFace를 사용하고 있다면 새로 고침()을 할 수 있습니다. 작업을 대기 상태로 만드는 것이 현명하다고 생각합니다.

+0

정확하지는 않지만, 여전히 유용합니다. 기본적으로 위의 솔루션은 여전히 ​​"내 물건"을 유발합니다. 20 개의 알림이 파이프를 1 초 이내에 내리면 refresh()가 20 번 발생합니다. 본질적으로 나는 잠시 동안 "상쾌하게"하는 것을 지연시키는 것을 찾고 있는데 사용자가 매우 빠르게 작업을 수행 할 경우 새로 고침을하지 않게된다. – jekelija

관련 문제