2013-10-06 57 views
1

我試圖創建一個基於org.eclipse.ui.commands,org.eclipse.ui.menus和org.eclipse.ui.handlersEclipse插件:菜單按鈕變灰

一個簡單的Eclipse按鈕,但調試時,我創建的按鈕是灰色的: http://i.stack.imgur.com/rNpbz.png

這是我的plugin.xml和我LoginHandler.java

的plugin.xml

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.4"?> 
<plugin> 

    <extension 
     point="org.eclipse.ui.views"> 
     <category 
      name="Server Browsing" 
      id="com.abc.serverapi"> 
     </category> 
     <view 
      name="Server Browser" 
      icon="icons/sample.gif" 
      category="com.abc.serverapi" 
      class="com.abc.serverapi.views.ServerBrowser" 
      id="com.abc.serverapi.views.serverbrowser"> 
     </view> 
    </extension> 
    <extension 
     point="org.eclipse.ui.perspectiveExtensions"> 
     <perspectiveExtension 
      targetID="org.eclipse.jdt.ui.JavaPerspective"> 
     <view 
       ratio="0.5" 
       relative="org.eclipse.ui.views.ProblemView" 
       relationship="right" 
       id="com.abc.serverapi.views.serverbrowser"> 
     </view> 
     </perspectiveExtension> 
    </extension> 
    <extension 
     point="org.eclipse.help.contexts"> 
     <contexts 
      file="contexts.xml"> 
     </contexts> 
    </extension> 
    <extension 
     point="org.eclipse.ui.commands"> 
     <command 
      id="com.abc.serverapi.command.login" 
      name="Open Server Login"> 
     </command> 
    </extension> 
    <extension 
     point="org.eclipse.ui.handlers"> 
     <handler 
      class="com.abc.serverapi.handler.LoginHandler" 
      commandId="com.abc.serverapi.command.login"> 
     </handler> 
    </extension> 
    <extension 
     point="org.eclipse.ui.menus"> 
     <menuContribution 
      allPopups="false" 
      locationURI="menu:org.eclipse.ui.main.menu"> 
     <menu 
       id="com.abc.serverapi.menu.login" 
       label="Server Login Menu"> 
      <command 
        commandId="com.abc.serverapi.command.login" 
        icon="icons/sample.gif" 
        id="com.abc.serverapi.menu.openLoginDialog" 
        mnemonic="O" 
        style="push"> 
      </command> 
     </menu> 
     </menuContribution> 
    </extension> 

</plugin> 

這裏是我的命令處理程序:

package com.abc.serverapi.handler; 

import org.eclipse.core.commands.ExecutionEvent; 
import org.eclipse.core.commands.ExecutionException; 
import org.eclipse.core.commands.IHandler; 
import org.eclipse.core.commands.IHandlerListener; 
import org.eclipse.jface.dialogs.MessageDialog; 
import org.eclipse.ui.IWorkbenchWindow; 
import org.eclipse.ui.handlers.HandlerUtil; 

public class LoginHandler implements IHandler { 

    @Override 
    public void addHandlerListener(IHandlerListener handlerListener) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void dispose() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public Object execute(ExecutionEvent event) throws ExecutionException { 
     IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); 
     MessageDialog.openInformation(
       window.getShell(), 
       "Test", 
       "Hello, Eclipse world"); 
     return null; 
    } 

    @Override 
    public boolean isEnabled() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean isHandled() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void removeHandlerListener(IHandlerListener handlerListener) { 
     // TODO Auto-generated method stub 

    } 

} 

回答

4

你在處理isEnabled()方法返回false - 所以未啓用的處理程序!

您可以擴展org.eclipse.core.commands.AbstractHandler而不是實現所有的IHandler