透视图管理类: /** * 透视图管理 * @author leo_net */ public final class PerspectiveManager { private PerspectiveManager() { } public static synchronized PerspectiveManager getManager() { if (manager == null) manager = new PerspectiveManager(); return manager; } public void switchToPerspective(final String id) { async(new Runnable() { public void run() { IWorkbenchWindow iworkbenchwindow = getWindowForPerspective(id); String s = getPerspectiveLabel(id); if (s != null) s = s.trim(); String s1 = MessageFormat .format( "/u8981/u5207/u6362/u5230 {0} /u900F/u89C6/u56FE/u5417?", new String[] { s }); if (id != null && iworkbenchwindow != null) switchToPerspective(iworkbenchwindow, id); } }); } protected void switchToPerspective(IWorkbenchWindow iworkbenchwindow, String s) { try { iworkbenchwindow.getWorkbench() .showPerspective(s, iworkbenchwindow); } catch (WorkbenchException workbenchexception) { errorDialog( Activator.getShell(), "/u9519/u8BEF", MessageFormat .format( "/u4E0D/u80FD/u5207/u6362/u5230/u900F/u89C6/u56FE {0}", new String[] { s }), workbenchexception); } } protected void async(Runnable runnable) { Display display = EBosActivator.getStandardDisplay(); if (display != null && !display.isDisposed()) display.asyncExec(runnable); } protected boolean isCurrentPerspective(IWorkbenchWindow iworkbenchwindow, String s) { boolean flag = false; if (iworkbenchwindow != null) { IWorkbenchPage iworkbenchpage = iworkbenchwindow.getActivePage(); if (iworkbenchpage != null) { IPerspectiveDescriptor iperspectivedescriptor = iworkbenchpage .getPerspective(); if (iperspectivedescriptor != null) flag = s.equals(iperspectivedescriptor.getId()); } } return flag; } protected String getPerspectiveLabel(String s) { IPerspectiveDescriptor iperspectivedescriptor = PlatformUI .getWorkbench().getPerspectiveRegistry().findPerspectiveWithId( s); if (iperspectivedescriptor == null) return null; else return iperspectivedescriptor.getLabel(); } private boolean shouldSwitchPerspective(IWorkbenchWindow iworkbenchwindow, String s, String s1, String s2) { if (isCurrentPerspective(iworkbenchwindow, s)) return false; String s3 = getPerspectiveLabel(s); if (s3 == null) return false; String s4 = Activator.getDefault().getPreferenceStore() .getString(s2); if ("always".equals(s4)) return true; if ("never".equals(s4)) return false; Shell shell = iworkbenchwindow.getShell(); if (shell == null || fPrompting) return false; fPrompting = true; if (shell.getMinimized()) shell.setMinimized(false); if (EBosActivator.getDefault().getPreferenceStore().getBoolean( PREF_ACTIVATE_WORKBENCH)) shell.forceActive(); MessageDialogWithToggle messagedialogwithtoggle = MessageDialogWithToggle .openYesNoQuestion(shell, "/u63D0/u793A", MessageFormat.format( s1, new String[] { s3 }), null, false, EBosActivator .getDefault().getPreferenceStore(), s2); boolean flag = messagedialogwithtoggle.getReturnCode() == 2; synchronized (this) { fPrompting = false; notifyAll(); } if (isCurrentPerspective(iworkbenchwindow, s)) flag = false; return flag; } private boolean isWindowShowingPerspective( IWorkbenchWindow iworkbenchwindow, String s) { if (iworkbenchwindow != null) { IWorkbenchPage iworkbenchpage = iworkbenchwindow.getActivePage(); if (iworkbenchpage != null) { IPerspectiveDescriptor iperspectivedescriptor = iworkbenchpage .getPerspective(); if (iperspectivedescriptor != null && iperspectivedescriptor.getId().equals(s)) return true; } } return false; } private IWorkbenchWindow getWindowForPerspective(String s) { IWorkbenchWindow iworkbenchwindow = Activator .getActiveWorkbenchWindow(); if (isWindowShowingPerspective(iworkbenchwindow, s)) return iworkbenchwindow; IWorkbenchWindow aiworkbenchwindow[] = PlatformUI.getWorkbench() .getWorkbenchWindows(); for (int i = 0; i < aiworkbenchwindow.length; i++) { iworkbenchwindow = aiworkbenchwindow[i]; if (isWindowShowingPerspective(iworkbenchwindow, s)) return iworkbenchwindow; } iworkbenchwindow = Activator.getActiveWorkbenchWindow(); if (iworkbenchwindow != null) return iworkbenchwindow; if (aiworkbenchwindow.length > 0) return aiworkbenchwindow[0]; else return null; } private static void errorDialog(Shell shell, String s, String s1, Throwable throwable) { Object obj; if (throwable instanceof CoreException) { obj = ((CoreException) throwable).getStatus(); if (obj != null && s1.equals(((IStatus) (obj)).getMessage())) s1 = null; } else { obj = new Status(4, "插件项目名", 0, "/u9519/u8BEF: ", throwable); } ErrorDialog.openError(shell, s, s1, ((IStatus) (obj))); } private static PerspectiveManager manager = null; private boolean fPrompting; public static final String PREF_ACTIVATE_WORKBENCH; static { PREF_ACTIVATE_WORKBENCH = PerspectiveManager.class .getName() + ".activate_workbench"; } 透视图管理类调用 : PerspectiveManager.getManager().switchToPerspective( PerspectiveID);