2017-10-13 4 views
1

내 vaadin 앱의 textArea에 일부 로그 문자열을 추가하려고합니다.Vaadin "나중에 실행"func?

VaadinSqlApplication.logger.info("Export start"); 
logTextArea.setValue("Export Start"); 
... 
logTextArea.setValue("Export done"); 

그러나 전체 기능이 끝나면 textArea 만 변경됩니다.

Platform.runLater(new Runnable() { 
       @Override 
       public void run() { 
        //change text 
      }); 

또는 스윙 :

EventQueue.invokeLater(changer); 

답변

2

는 UI에 대한 모든 업데이트가 그룹화됩니다 기본적으로 당신의 Vaadin이 UI에 "푸시"를 활성화해야합니다 자바 FX처럼 어떤 기능이 있나요 단일 응답으로 보내집니다 (함수가 반환 할 때 :라고 말한 것처럼).

이 페이지를 살펴 보라는 아주 멋지게 전체 설정을 설명 : 푸시가 활성화되면

https://vaadin.com/docs/v8/framework/advanced/advanced-push.html

BTW, 당신은 당신이 언급 한 SwingUtilities.invokeLater와 유사한 기술이 필요합니다 :

다른 스레드의 UI 개체를 변경하고 으로 푸시하면 UI에 액세스 할 때 사용자 세션이 잠길 필요가 있습니다. 그렇지 않으면 다른 스레드에서 수행 된 UI 업데이트가 과 정기적으로 이벤트 기반 업데이트가 충돌하여 데이터가 손상되거나 교착 상태가 발생할 수 있습니다. 이 때문에 사용자는 access() 메서드를 사용하여 UI에 액세스 할 수 있습니다.이 메서드는 충돌을 방지하기 위해 세션을 잠급니다. 은 Runnable을 매개 변수로 사용합니다. 예를 들어

:

ui.access(new Runnable() { 
    @Override 
    public void run() { 
     ... 
    } 
});