Статьи

Подключение к жизненному циклу платформы NetBeans

Одно из основных различий между разработкой приложения на платформе NetBeans и монолитным Java-приложением заключается в том, что основного метода не существует. Иногда это заставляет разработчиков задуматься, куда они могут вставить свой собственный код. В этой статье описаны некоторые места, где это возможно.

Хотя в большинстве случаев это немного радикально, вы можете заменить основной класс, используемый для запуска NetBeans, своим собственным классом, а затем делегировать его обратно в обычный основной класс NetBeans. Это предлагает вам ловушку в начале последовательности запуска без необходимости изменять программы запуска или сценарии оболочки.

Любой модуль может предоставить класс ModuleInstall . Метод validate будет вызван еще до того, как ваш модуль будет загружен, поэтому это первый хук уровня модуля, обычно доступный в последовательности запуска. Обратите внимание, что многие сервисы и классы, предлагаемые платформой, вряд ли будут инициализированы на этом этапе.

Вскоре после этого метод restore () будет вызываться для каждого класса ModuleInstall. На этом этапе будет инициализировано больше сервисов и классов, чем с методом validate () , но GUI, вероятно, еще не будет реализован. Вы можете опубликовать некоторый код, который будет выполнен, когда пользовательский интерфейс полностью загружен, вот так:

    @Override
public void restored() {
WindowManager.getDefault().invokeWhenUIReady(
new Runnable() {
public void run() {
// any code here will be run with the UI is available
SomeTopComponent.findInstance().open();
}
});
}

Обратите внимание, что предоставление класса ModuleInstall несколько ухудшит общее время запуска, но до тех пор, пока вы не будете чрезмерно использовать классы ModuleInstall и позаботитесь о выполнении любых длительных задач из его методов в фоновом потоке, у вас должно быть все в порядке.

Еще одним важным классом в разработке платформ является класс TopComponent . Он предлагает несколько методов, которые позволяют вам подключиться к его жизненному циклу.

Вот последовательность событий, которую вы можете подключить при открытии TopComponent:

  1. JComponent.addNotify
  2. TopComponent.componentOpened
  3. TopComponent.componentShowing
  4. TopComponent.componentActivated

Когда вы устанавливаете фокус на TopComponent, вызывается метод componentActivation . Аналогично, метод componentDeactivation вызывается, когда фокус перемещается от этого TopComponent.

Вот последовательность событий, к которой вы можете подключиться при закрытии TopComponent:

  1. TopComponent.canClose
  2. JComponent.removeNotify
  3. TopComponent.componentHidden
  4. TopComponent.componentDeactivated
  5. TopComponent.componentClosed

Обратите внимание, что вы можете вернуть false из TopComponent.canClose, чтобы вообще не закрывать TopComponent.

Класс ModuleInstall предлагает два метода, которые позволяют вам подключиться к выходной последовательности. Метод закрытия вызывается первым и требует возврата логического значения. Если true , то ваш модуль соглашается закрыться, но если false , то вы не позволите продолжить последовательность выхода. Метод close вызывается после того, как все классы ModuleInstall возвращают true из метода закрытия, и он является окончательным хуком, в котором модули могут участвовать в жизненном цикле приложения.

От http://wiki.netbeans.org/NetBeansDeveloperFAQ