某些時候,我們的Action的執行依賴於某些配置已經完好才能運行,即要檢查環境是否已經配置完好。我們可以這樣做:在Action的run中進行判斷,然後將使用者引導至配置頁面進行環境配置。對使用者體驗是非常好的。
public class StartActionDelegate implements IWorkbenchWindowActionDelegate {private IWorkbenchWindow window; public void dispose() {}/* * @see IWorkbenchWindowActionDelegate#init(IWorkbenchWindow) */public void init(IWorkbenchWindow window) {this.window = window;}/* * @see IActionDelegate#run(IAction) */public void run(IAction action) { //查詢喜好設定是否已經配置了tomcat的home目錄IPreferenceStore pref =TomcatLauncherPlugin.getDefault().getPreferenceStore();String appHome = pref.getString(TOMCAT_PREF_HOME_KEY); if("".equals(appHome)){//App Home未配置 //將使用者引導至喜好設定配置頁面String pageId = "com.sysdeo.eclipse.tomcat.Page3";PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();Shell parentShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); PreferenceDialog pd = new PreferenceDialog(shell, manager); pd.setSelectedNode(pageId);//設定選中的頁面 pd.open();/*** 上述代碼可用這一行代替*PreferencesUtil.createPreferenceDialogOn(getShell(), pageId, new String[] { pageId,"com.sysdeo.eclipse.tomcat.Page4"}, null).open();*/return;}else{ //to-do something} }
即為點擊StartTomcatAction後,將使用者引導到的了如下喜好設定頁面:
ps:代碼是在tomcatplugin基礎上修改的。
附錄:
如下這樣用也是可以的:
protected boolean showPreferencePage(GenericServerComposite composite) {PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage"); //$NON-NLS-1$//$NON-NLS-2$PreferenceManager manager2 = new PreferenceManager();manager2.addToRoot(node);final PreferenceDialog dialog = new PreferenceDialog(composite.getShell(), manager2);final boolean[] result = new boolean[] { false };BusyIndicator.showWhile(composite.getDisplay(), new Runnable() {public void run() {dialog.create();if (dialog.open() == Window.OK)result[0] = true;}});return result[0];}