Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse RAP多窗口/选项卡_Eclipse_Tabs_Window_Rcp_Eclipse Rap - Fatal编程技术网

Eclipse RAP多窗口/选项卡

Eclipse RAP多窗口/选项卡,eclipse,tabs,window,rcp,eclipse-rap,Eclipse,Tabs,Window,Rcp,Eclipse Rap,我想要一个多选项卡/窗口的EclipseRAP应用程序 我可以使用打开第二个窗口 UrlLauncher launcher=RWT.getClient().getService(UrlLauncher.class); openURL(“/gasf?foo=other_透视图”); 在这里,我使用foo参数来选择我想要的个人。但是,使用此方法将创建一个单独的http会话,因此各种侦听器等将不会与我的第一个窗口通信 我还尝试使用打开第二个窗口/页面 PlatformUI.getWorkbench(

我想要一个多选项卡/窗口的EclipseRAP应用程序

我可以使用打开第二个窗口

UrlLauncher launcher=RWT.getClient().getService(UrlLauncher.class);
openURL(“/gasf?foo=other_透视图”);
在这里,我使用foo参数来选择我想要的个人。但是,使用此方法将创建一个单独的http会话,因此各种侦听器等将不会与我的第一个窗口通信

我还尝试使用打开第二个窗口/页面

PlatformUI.getWorkbench().getActiveWorkbenchWindow().openPage(“其他视图”,null)

但这只会更改当前窗口的透视图,而不会在浏览器中打开第二个窗口或选项卡

是否有人实现了多选项卡RAP应用程序,并在选项卡之间使用selectionlisteners

谢谢你能提供的帮助

编辑: 非常感谢您,正如您所指出的,我可以使用共享HTTP会话来共享侦听器或任何内容,到目前为止一切都很好。现在,下一步是能够根据外部事件更新选项卡

为了尝试从另一个选项卡刷新的想法,我做了一个虚拟计时器,在2秒钟后(即,模拟从另一个选项卡触发的内容)执行以下操作:

final ServerPushSession pushSession=new ServerPushSession();
pushSession.start();
Display=Display.getDefault();
NavigationView NavigationView=((NavigationView)window.getActivePage().findView(NavigationView.ID));
timer.schedule(新TimerTask(){
@凌驾
公开募捐{
display.asyncExec(新的Runnable(){
公开募捐{
navigationView.doSomething();
}
});
}
}, 2000);
这管用!
pushSession.start()
强制用户界面刷新,无需任何用户交互。现在,只要达到2秒,就会在navigationView上执行操作
doSomething()

我唯一关心的是这会给服务器带来多大的负载,但这至少是一个合理的解决方案。我证实了你的答案

EDIT2: 为了完整起见,为了确保在从另一个显示器更新显示器时不会出现无效的线程访问错误,在
doSomething()
方法中,我们必须使用
display.asyncExec执行操作:

Display Display=Display.getCurrent();
公共无效doSomething(){
display.asyncExec(新的Runnable(){
公开募捐{
treeViewer.refresh();
}
});
}

根据RAP的当前架构,您不能将工作台窗口分布在不同的浏览器选项卡上。每个新浏览器都会启动一个新的
ui会话
,这意味着另一个
显示
(请参阅)


但是,
HttpSession
应该是相同的(除非您关闭了cookies),因此您可以使用它作为不同浏览器选项卡之间的通信方式。

感谢您的澄清,好的,这是一个很好的起点,因此我的后续问题是,是否可以在一个选项卡的UI上触发事件,而无需用户单击。我的想法是让另一个选项卡上的事件调用该选项卡上的刷新(或其他内容)?编辑我的问题,回答我的以下问题:)谢谢!是的,使用ServerPush是在没有用户交互的情况下更新UI的唯一方法。在服务器上,它保持一个请求套接字打开,因此是的,有一些开销,加上一些代理不喜欢长期存在的请求。这就是为什么我们建议只在需要时激活SP it(例如,显示运行操作的进度等)。好的,谢谢,我将添加代码,仅在实际涉及多个选项卡时启动ServerPush。我还编辑了我的问题,让读者知道如果他们像我一样使用多个选项卡,如何消除无效的线程访问。谢谢你的投入,它工作得很好,不适合我。干杯