Одно из основных различий между разработкой приложения на платформе 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:
- JComponent.addNotify
- TopComponent.componentOpened
- TopComponent.componentShowing
- TopComponent.componentActivated
Когда вы устанавливаете фокус на TopComponent, вызывается метод componentActivation . Аналогично, метод componentDeactivation вызывается, когда фокус перемещается от этого TopComponent.
Вот последовательность событий, к которой вы можете подключиться при закрытии TopComponent:
- TopComponent.canClose
- JComponent.removeNotify
- TopComponent.componentHidden
- TopComponent.componentDeactivated
- TopComponent.componentClosed
Обратите внимание, что вы можете вернуть false из TopComponent.canClose, чтобы вообще не закрывать TopComponent.
Класс ModuleInstall предлагает два метода, которые позволяют вам подключиться к выходной последовательности. Метод закрытия вызывается первым и требует возврата логического значения. Если true , то ваш модуль соглашается закрыться, но если false , то вы не позволите продолжить последовательность выхода. Метод close вызывается после того, как все классы ModuleInstall возвращают true из метода закрытия, и он является окончательным хуком, в котором модули могут участвовать в жизненном цикле приложения.
От http://wiki.netbeans.org/NetBeansDeveloperFAQ