Как реализовать виджет, похожий на Override / Implement, предоставляемый Eclipse? - PullRequest
0 голосов
/ 09 января 2012

Я хочу выполнить какое-то действие и показать окно, аналогичное окну Переопределить инструмент, предоставленное Eclipse.

Я нашел этот пост , но я все еще борюсь с ним.

Я создал действие:

   <objectContribution
            id="Test.objectContribution1"
            objectClass="org.eclipse.core.resources.IProject">

            <action
               label="MyView"
               retarget="true"
               menubarPath="addition"
               class="test.plugin.popup.actions.MyViewAction"
               id="test.plugin.popup.actions.MyViewAction"
               >
         </action>

Я просто скопировал класс OverrideMethodsAction Eclipse и переименовал его в MyViewAction.Когда я нажимаю на моё новое действие, я получаю исключение:

    !ENTRY org.eclipse.libra.facet 4 0 2012-01-09 14:50:54.635
    !MESSAGE startup class must implement org.eclipse.ui.IStartup

    !ENTRY org.eclipse.ui 4 4 2012-01-09 14:51:03.052
    !MESSAGE Could not create action delegate for id: test.plugin.popup.actions.MyViewAction

    !ENTRY org.eclipse.equinox.registry 4 1 2012-01-09 14:51:03.053
    !MESSAGE Plug-in "test" was unable to instantiate class 

    test.plugin.popup.actions.MyViewAction.
        !STACK 0
        java.lang.InstantiationException: test.plugin.popup.actions.MyViewAction
            at java.lang.Class.newInstance0(Class.java:357)
            at java.lang.Class.newInstance(Class.java:325)
            at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184)
            at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
            at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
            at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
            at org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:268)
            at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
            at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:264)
            at org.eclipse.ui.internal.PluginAction.createDelegate(PluginAction.java:122)
            at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:223)
            at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
            at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
            at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
            at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
            at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
            at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588)
            at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209)
            at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
            at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
            at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
            at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
            at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
            at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
            at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
            at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
            at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
            at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
            at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
            at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
            at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:616)
            at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
            at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
            at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
            at org.eclipse.equinox.launcher.Main.main(Main.java:1386)

Я понятия не имею, что еще делать или где искать.

Спасибо

РЕДАКТИРОВАТЬ:

Не удалось добавить конструктор без аргументов.Я не знаю, как это сделать.

Я начал заново, я копирую классы GenerateToStringAction, GenerateMethodAbstractAction и SelectionDispatchAction в мой проект и переименовал их в GenerateToStringActionAG, GenerateMethodAbstractActionAG и * SelectionDispatchActionAG *.* Я ожидал увидеть окно GenerateToString (), когда щелкнул по своему действию, но вместо этого я получил:

java.lang.ClassNotFoundException: test.plugin.popup.actions.GenerateToStringActionAG
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:345)
    at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1207)
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
    at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
    at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
    at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
    at org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:268)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:264)
    at org.eclipse.ui.internal.PluginAction.createDelegate(PluginAction.java:122)
    at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:223)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1386)

Я думаю, что я поступаю очень неправильно.

1 Ответ

0 голосов
/ 10 января 2012

Ваш класс test.plugin.popup.actions.MyViewAction должен иметь конструктор без аргументов.

И пока мы здесь, вы можете взглянуть на этот ответ .

...