我想要一個多選項卡/窗口的Eclipse RAP應用程序。Eclipse RAP多窗口/選項卡
我能夠打開使用
UrlLauncher launcher = RWT.getClient().getService(UrlLauncher.class);
launcher.openURL("/gasf?foo=other_perspective");
當我用foo的參數設置爲選擇我要爲視角第二個窗口。然而,使用這種方法將創建一個特殊的http會話,因此各種監聽器等將不會與我的第一個窗口進行通信。 。
我還試圖打開使用
PlatformUI.getWorkbench()的第二窗口/頁getActiveWorkbenchWindow()openPage( 「other_perspective」,NULL);
但是,這只是改變當前的窗口視角,但不會在我的瀏覽器中打開第二個窗口或標籤。
是否有人通過在選項卡之間使用selectionlisteners實現了多選項卡RAP應用程序?
感謝您的幫助,您可以提供
編輯: 非常感謝ralfstx,正如你指出的那樣,我可以分享的聽衆或使用共享HTTP會話東西了,到目前爲止,好。現在下一步是能夠根據外部事件更新選項卡。
要嘗試從另一個選項卡我刷新的想法,我做了一個僞定時器2秒後,做的東西(即模擬的東西從另一個選項卡觸發)具有:
final ServerPushSession pushSession = new ServerPushSession();
pushSession.start();
Display display = Display.getDefault();
NavigationView navigationView = ((NavigationView) window.getActivePage().findView(NavigationView.ID));
timer.schedule(new TimerTask() {
@Override
public void run() {
display.asyncExec(new Runnable() {
public void run() {
navigationView.doSomething();
}
});
}
}, 2000);
這工作! pushSession.start()
強制UI在沒有任何用戶交互的情況下刷新。因此,現在在達到2秒後立即在navigationView上執行操作doSomething()
。
我唯一的擔心是服務器負載多少,但至少它是一個合理的解決方案。我驗證了你的答案。
EDIT2: 只要是完整的,以確保在無效的線程訪問錯誤,不磕碰,因爲我們使用的是display.asyncExec
更新從另一個顯示器的顯示,在doSomething()
方法,我們必須執行操作:
Display display = Display.getCurrent();
public void doSomething() {
display.asyncExec(new Runnable() {
public void run() {
treeViewer.refresh();
}
});
}
感謝您的澄清,好吧,這是一個很好的起點,所以我的後續問題是,是否有可能在用戶沒有任何點擊的情況下在一個選項卡的UI上觸發事件。我的想法是讓另一個選項卡上的事件在選項卡上調用刷新(或其他)。 – Jarod
編輯我的問題,回答我的folloowup queston :)謝謝! – Jarod
是的,使用ServerPush是在沒有用戶交互的情況下更新UI的唯一方法。在服務器上,它保持請求套接字打開,所以是的,有一些開銷,加上一些代理不喜歡長期的請求。這就是爲什麼我們建議只在需要時激活SP(例如爲了顯示正在運行的操作等) – ralfstx