我正在將基於akka actors的後端集成到vaadin應用程序中。 我面對的問題是我敢說簡單(與我一起我是一個vaadin第一次計時器:P)。用戶界面中的Vaadin通知與Akka演員
項目結構(簡化)
2個模塊的前端和後端。
我backEnd有一個actor系統管理所有的後端actor。
- >和具有所有相關方法進行必要計算的服務類。我的前端包含一個單一的用戶界面和一堆視圖。
- >和第二個演員系統管理一個UIActor(因爲後端演員不能訪問用戶界面)
不用說,後端是前端的依賴項的一部分。
問題
在我的意見我有一個點擊事件處理程序,通過UIActor將消息發送到後端演員這反過來答案回來一次計算完成的一個。
這是在UIActor
public void onReceive(Object message) throws Exception {
if (message == "test") {
System.out.println("showing notification by "+currentUI);
currentUI.testMethod();
} else if (message instanceof MyUI) {
System.out.println("this is the ui actor test request forwarded");
currentUI = (MyUI) message;
backEndAgent.tell("check",getSelf());
} else {
unhandled(message);
}
}
了「的onReceive」方法currentUI包含(MyUI)getCurrent(),發送由處理器的消息,如果你想知道的返回值。
至於測試方法,這是非常基本的。
public void testMethod() {
Notification.show("Success", Notification.Type.HUMANIZED_MESSAGE);
}
不幸此呼叫在從返回null的Page.getCurrent()得到的顯示方法生成一個空指針。
所以我的問題是爲什麼我在這裏得到一個空指針?
也在我的演員我發送currentUI參考作爲消息,因爲否則調用UIActor內的getCurrent返回null。任何想法爲什麼?
編輯
這是新的測試方法的頁面參數是currentUI.getPage()
public void testMethod(final Page page) {
this.access(new Runnable() {
@Override
public void run() {
new Notification("Success",Notification.Type.HUMANIZED_MESSAGE).show(page);
}
});
}
這在某種程度上解決了這個問題,但只顯示後,我按一下按鈕第二次,但沒有通知第一次。
這讓我瘋狂。
是的,就是這樣。但即使這種方法不起作用,我發佈這個問題後嘗試它。我編輯我的第一篇文章與我正在使用的工作。 – Abel
@Abel編輯我的答案 –
謝謝我設法通過從服務器端啓用推送工作。你的回答指向了正確的方向。 – Abel