2016-11-01 10 views
0

私は以下のような状況があります。私のアプリでは、定期的にJavaのTimerTaskを使っていくつかのコントロール値を更新します。 更新用メソッドは次のようになります。Vaadin。 UIが添付されていない場合の対処方法

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

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

[OK]を、すべてのユーザがログインするには、何の問題もO/W更新されていたら。ユーザーがログアウトしてから同じユーザーがログインしたと仮定します。その後、isAttached()メソッドはfalseを返します。これは、任意の助けを事前に、私はこの問題を解決することができますどのようにこの( を克服するためにどのように?

感謝をなぜ起こるか は、私が理解することはできません

+0

myUIの値は有効か、新しいUIで更新されていますか? –

+0

André、どういう意味ですか?この場合、myUI.get()はnullを返しませんが、そのような状況でセッションはnullです。 – user1053031

+0

ログアウト時に何をしますか?新しいユーザーは新しいVaadinUIオブジェクトを取得しますか? –

答えて

0

私は問題の根本を見つけたようです。私はすべてのコントロールを処理するために単一のタイマーオブジェクトを使用しました。クラスごとに独自のタイマーを使用するようにしていますが、問題を解決したようですが、この解決策は私にとっては完璧ではありません。実際は同じ。しかしこれまでのところ、この問題を別の方法で解決する方法がわかりません。

-1

あなたは、静的メソッドUI.getCurrent()を使用して、キャストshoudあなた自身のmyUIには、確実に現在使用されているUIを取得することが確実になるでしょう。

+0

fante76、上記のコードスニペットに示すように、静的なget()メソッドを使用してUI.getCurrent()を呼び出しています。キャスティングもそこに作られています。 – user1053031

+0

UI.getCurrent()はバックグラウンドタスクでは機能しません(どのUIにアクセスする必要がありますか)。フォアグラウンドスレッドでUIを保持し、そのUIインスタンス/値を他のすべてのスレッドに渡す必要があります –

+0

申し訳ありませんが、私はその環境がバックグラウンド課題であるとは読んでいませんでした。このタスクがGUI環境から開始された場合、このソリューションは、前述のとおり、UIをタスクに渡すことによって使用できます。 – fante76

関連する問題