Как настроить текст и кнопки для записи "О" в меню "Справка" в приложении RCP Eclipse 3.8.1
Я пытаюсь настроить пункт меню Справка-> О программе Eclipse 3.8.1. Я попробовал два 3.x дружественных метода, так как Eclipse 4.0 работает по-разному.
---> Я пытался расширить сам AboutAction (org.eclipse.ui.internal.dialogs.AboutDialog), чтобы я мог добавить одну строку в текст DialogArea и добавить прокручиваемый интерфейс Dialog Gui, когда нажата кнопка "Лицензия". Но все методы защищены в API, я вижу, он говорит, что пользователь может использовать, но не переопределить (то же самое с классом Dialog)
---> Я попытался расширить AbstractHandler по умолчанию, и в методе execute я создаю объект Dialog, куда я в основном хочу добавить все, что мне нужно, одну за другой. Единственная проблема, связанная с этим, заключается в том, что я не могу работать с объектом Dialog в методе execute, потому что он остается пустой ссылкой до конца метода execute, поэтому я не могу добавить что-либо к нему без ошибки nullPointerException.
---> Я также попытался добавить <property>
к самому plugin.xml. Это похоже на функцию 4.x. Поле описания в меню About также не работало для ввода текста в области текста диалога About.
@SuppressWarnings("restriction")
public class AboutActionStableHandler extends AbstractHandler {
public Object execute(ExecutionEvent event) throws ExecutionException
{
helpDialog = new AboutDialog(HandlerUtil.getActiveShellChecked(event));
helpDialog.open();
//helpDialog.getDialogArea();
Shell aboutShell = helpDialog.getShell();
aboutShell.setLayout(new GridLayout());
Label version = new Label(aboutShell, SWT.NONE);
version.setText(Platform.getProduct().getDefiningBundle().getVersion().toString());
version.setLayoutData(GridDataBuilder.create().
grabExcessHorizontalSpace(true).
widthHint(500).
heightHint(5).
horizontalAlignment(SWT.FILL).build());
return null;
}
Так что я получаю эту ошибку во время выполнения, когда я нажимаю на о Gui java.lang.NullPointerException
at com.magic.gui.commands.AboutActionStableHandler.execute(AboutActionStableHandler.java:28)
at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:290)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829)
at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815)
at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at com.magic.rcp.Application.start(Application.java:87)
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:353)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
1 ответ
Призвание helpDialog.open()
отображает диалоговое окно и не возвращается, пока оно не будет закрыто, когда будет поздно его изменить.
Вы могли бы позвонить helpDialog.create()
просто создать диалог и вызвать open()
потом.
Но AboutDialog
является внутренним классом, пытающимся изменить его, так как это нарушает Правила взаимодействия Eclipse API, поэтому вам пришлось подавить предупреждение об ограничении. Там нет никакого способа, что AboutDialog
может быть изменен официально. Если вы хотите изменить диалог, вы должны написать свой собственный диалог.