Eclipse RCP: действия против команд

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
25
задан 16 February 2009 в 06:51
поделиться

3 ответа

Вы читали wiki FAQ затмения, Каково различие между командой и действием?

Вы, вероятно, уже понимаете, что Действия и Команды в основном делают то же самое: Они заставляют определенную часть кода выполняться. Они инициированы, главным образом, от artificats в пользовательском интерфейсе

основное беспокойство с [1 121], Действия состоят в том, что проявление и код все хранятся в Действии .
, Хотя существует некоторое разделение в Делегатах Действия, они все еще подключены к основному иску. События выбора передаются Действиям так, чтобы они могли изменить свое включенное состояние (программно) на основе текущего выбора. Это не очень изящно. Также для размещения действия с определенной частью инструментальных средств необходимо использовать несколько точек расширения.

Команды в значительной степени решают все эти проблемы. Основная идея состоит в том, что Команда является просто абстрактной идеей некоторого кода, который будет выполняться. Фактическая обработка кода сделана, ну, в общем, обработчиками . Обработчики активируются определенным состоянием инструментальных средств. Это состояние запрашивается выражениями ядра платформы. Это означает, что нам только нужна одна глобальная команда Save, которая ведет себя по-другому, на основе которого обработчик в настоящее время активен.

properties of a command

Этот статья детализирует различия

Действия :

  • UI и обработка всегда связываются . Нет никакого способа, которым можно разделить друг друга
  • , В то время как Действия могут быть внесены различным частям инструментальных средств (всплывающее меню панель/tool), все они были различные точки расширения и таким образом, Вы заканчиваете тем, что копировали XML в нескольких местах. Худший из него - то, что не все точки расширения ожидают ту же конфигурацию.
  • Действия Определения в нескольких местах кошмар обслуживания . Если необходимо изменить значок действия, необходимо измениться во всех местах.
  • Другая проблема с дублированием Действий в plugin.xml - то, что несколько инстанцируют тех же Действий, будет создан в памяти .

Команды включают больше точек расширения, но:

  • Обработчик может быть объявлен отдельно от Команды. Это включает для [1 130] несколько объявлений обработчика для той же команды .
  • , activeWhen для всех обработчиков оценен и тот, который возвращает true для наиболее особого условия, выбран. Все эти вещи обошедшиеся без ровная загрузка Вашего обработчика в памяти. Даже не загружая Ваш плагин !
  • Определение параметров является всем о возврате карты отображаемых имен & идентификаторы. Имя было бы отображено на странице привязок клавиш, и идентификатор будет использоваться для вызова команды, когда сочетание клавиш будет нажато.
  • Определяют IExecutionListener, который является просто наблюдателем выполнения команды, таким образом, оно не может ни наложить вето на нем, ни внести любые изменения в событие
40
ответ дан VonC 16 February 2009 в 16:51
поделиться
  • 1
    К вашему сведению, strcasecmp () не находится в < cstring> или < string>. это находится в < строки h> но я don' t думают, что Windows имеет его. – jcoffland 10 November 2012 в 17:05

Просто добавив к превосходному ответу VonC, команды могли бы быть небольшим излишеством, если Ваше приложение является относительно небольшим. Их относительно более трудно установить, и они сияют больше всего, когда у Вас есть разнообразные перспективы, редакторы и представления.

Для чего-то простого, я пошел бы с действиями.

6
ответ дан Mario Ortegón 16 February 2009 в 16:51
поделиться
  • 1
    конечно, момент Вы говорите is x < 0, you' ve теперь получил булевскую переменную, итак, почему Вы тогда производите целое число, которое должно будет тогда быть преобразовано в bool для соответствия возвращаемому аргументу? – Peter Nimmo 23 October 2013 в 01:19

И помните, что Action может быть устаревшим в более поздних версиях Eclipse. Я предлагаю вам использовать Command с самого начала.

4
ответ дан 28 November 2019 в 20:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: