Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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
Java 如何停止在eclipse RCP中打开viewpart?_Java_Eclipse Plugin_Swt_Eclipse Rcp - Fatal编程技术网

Java 如何停止在eclipse RCP中打开viewpart?

Java 如何停止在eclipse RCP中打开viewpart?,java,eclipse-plugin,swt,eclipse-rcp,Java,Eclipse Plugin,Swt,Eclipse Rcp,我正在使用EclipseRCP。我在表中有一个项目,当我双击该项目时,它会打开一个视图。如果用户无权访问该视图,则用户无法打开该视图 因此,我检查了用户对该项目的访问权限,并关闭了透视图 if (!user.hasReadAccess()) final IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); for (int w = 0; w < windows.length; w

我正在使用EclipseRCP。我在表中有一个项目,当我双击该项目时,它会打开一个视图。如果用户无权访问该视图,则用户无法打开该视图

因此,我检查了用户对该项目的访问权限,并关闭了透视图

if (!user.hasReadAccess())
    final IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows();

for (int w = 0; w < windows.length; w++)
{
    final IWorkbenchPage[] pages = windows[w].getPages();
    for (int p = 0; p < pages.length; p++)
    {
        final IWorkbenchPage page = pages[p];
        //  page.hideView(page.findView(MYViewID));
        final IViewReference[] viewRefs = page.getViewReferences();
        for (int v = 0; v < viewRefs.length; v++)
        {
            for (IPerspectiveDescriptor ipd : page.getOpenPerspectives())
            {
                if (ipd.getId().equalsIgnoreCase(PERSPECTIVE_ID))
                {

                    page.closePerspective(page.getPerspective(), true, true);
                    break;
                }
            }
        }
    }
}
if(!user.hasReadAccess())
最终IWorkbenchWindow[]windows=PlatformUI.getWorkbench().getWorkbenchWindow();
对于(int w=0;w
它隐藏透视图,但总是打开透视图并立即关闭


换句话说,即使在调用了
closePerspective()
之后,
ViewPart
CreatePartControl
方法仍然被调用,并且用户能够看到视图立即被打开和关闭。是什么导致此问题?我如何解决此问题

在IWorkbenchPage上应该有一个方法可用于打开以下视图:

public IViewPart showView(String viewId, String secondaryId, int mode)
            throws PartInitException;
您应该在if条件中调用此方法

if ( userHasReadAccess ) {
    page.showView(viewId, secondaryId, IworkbenchPage.VIEW_ACTIVATE );
}

在IWorkbenchPage上应该有一个方法可用于打开以下视图:

public IViewPart showView(String viewId, String secondaryId, int mode)
            throws PartInitException;
您应该在if条件中调用此方法

if ( userHasReadAccess ) {
    page.showView(viewId, secondaryId, IworkbenchPage.VIEW_ACTIVATE );
}

我不明白打开视图与关闭某个人有什么关系。顺便说一句,你能以一种合理的方式重新格式化代码吗?我不明白打开视图与关闭某个个人有什么关系。顺便说一句,你能以合理的方式重新格式化代码吗?