2016-11-01 5 views
0

다음과 같은 상황이 있습니다. 내 애플 리케이션에서 정기적으로 자바의 TimerTask를 사용하여 일부 컨트롤 값을 업데이 트합니다. 그 갱신 방법은 다음과 같습니다바이든. UI가 첨부되지 않은 경우 어떻게해야합니까?

public void updateDates() 
{ 
    if(!myUI.get().isAttached()) 
     return; 

    myUI.get().access(() -> { 
     isAsyncUpdate = true; 
     resetUnmodified(); 
     isAsyncUpdate = false; 
     myUI.get().push(); 
    }); 
} 

좋아, 모든 사용자가 로그인 할 어떤 문제하여 w/o 업데이트되는 후. 사용자가 로그 아웃 한 다음 동일한 사용자가 로그인했다고 가정하고 그 후에 isAttached() 메소드는 false를 반환합니다. 이 사전에 어떤 도움 나는이 문제를 해결할 수있는 방법이 ( 을 극복하는 방법?

감사 일어나는 이유 나는 이해할 수 없다

+0

myUI 값이 유효하거나 새 UI로 업데이트 되었습니까? –

+0

앙드레, 무슨 뜻이야? 이 경우에는 myUI.get()이 null을 반환하지는 않지만 이러한 상황에서는 세션이 null입니다. – user1053031

+0

로그 아웃 할 때 무엇을합니까? 새로운 사용자가 새로운 VaadinUI 객체를 얻습니까? –

답변

0

문제의 근본 원인을 찾은 것 같습니다. 단일 타이머 개체를 사용하여 모든 컨트롤을 처리했습니다. 이제 리팩토링했습니다. 클래스를 사용하여 컨트롤 당 자체 타이머를 사용할 수 있습니다. 문제가 해결 된 것 같습니다. 그러나이 솔루션은 나에게 완벽하지 않습니다. 하나의 타이머가 더 좋고 많은 작업을 수행합니다. 실제로 같은. 그러나 지금까지 나는이 문제를 다른 방법으로 해결하는 방법을 모른다.

-1

당신은 정적 메서드 UI.getCurrent()를 사용하고 주조 갈까요 그것은 자신의 myUI에 있으므로 확실하게 연결된 현재 사용중인 UI를 가져와야합니다.

+0

fante76, 위의 코드 스 니펫에 표시된대로 정적 get() 메서드를 사용하여 UI.getCurrent()를 호출합니다. 주조도 거기에서 이루어집니다. – user1053031

+0

백그라운드 작업에서 UI.getCurrent()가 작동하지 않습니다 (어떤 UI에 액세스해야합니까?) 포 그라운드 스레드에서 UI를 유지 한 다음 해당 UI 인스턴스/값을 다른 모든 스레드에 전달해야합니다. –

+0

죄송합니다. 그 환경을 배경 작업으로 읽지 않았습니다. 이 태스크가 GUI 환경에서 시작된 경우, 앞에서 설명한 것처럼 UI에 태스크를 전달하여이 솔루션을 사용할 수 있습니다. – fante76

관련 문제