かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

モジュールインストーラずっと誤解してた

NetBeansのモジュールのインストールを便利にしてくれるものかと、勝手に誤解してたけど、先日違うことに気づきました。
NetBeansの起動・停止のタイミングで処理を実行するためのものらしいです。

具体的な実行タイミングとしては、NetBeansが起動するときに出てるスプラッシュスクリーンが表示されてる時に実行させる処理や、ウィンドウの閉じるボタンが押されたときに実行される処理がかけます。

作ってみよう

作り方は非常に簡単です。NetBeansのモジュールのプロジェクトで新規作成からモジュールインストーラを選びます。

そうするとInstallerクラスが作成されます。restoredメソッドが最初から用意されていますが、恐らくclosingメソッドとcloseメソッドをよく使うと思います。

package okazuki;

import org.openide.modules.ModuleInstall;

public class Installer extends ModuleInstall {
    @Override
    public void restored() {
        System.out.println("起動中の処理");
    }

    @Override
    public boolean closing() {
        System.out.println("終了前の処理");
        // 常にfalseを返すとNetBeansを閉じさせないことが出来る
        return true;
    }

    @Override
    public void close() {
        System.out.println("終了処理");
    }


}

これで、自分の作ったモジュール全体の前処理や後処理を書くことが出来ます。
ちょっと本格的にモジュール作るとしたら、1つは必要になりそうなクラスかな。

この状態で実行すると、出力ウィンドウに以下のようにメッセージが表示されます。

-------------------------------------------------------------------------------
>Log Session: Sunday, February 28, 2010 5:11:04 PM JST
>System Info: 
  Product Version         = NetBeans IDE 6.8 (Build 200912041610) (#ec9be6a6486c)
  Operating System        = Windows Vista version 6.0 running on x86
  Java; VM; Vendor        = 1.6.0_11; Java HotSpot(TM) Client VM 11.0-b16; Sun Microsystems Inc.
...途中省略...
WARNING [org.netbeans.modules.project.libraries.LibrariesStorage]: LibraryDeclarationHandlerImpl: Cannot create library: sjmc-ant-utils of unknown type: j2se
WARNING [org.netbeans.modules.project.libraries.LibrariesStorage]: LibraryDeclarationHandlerImpl: Cannot create library: cdc-agui-swing-layout of unknown type: j2se
起動中の処理
INFO [org.netbeans.core.startup.NbEvents]: モジュールを有効化しています:
        org.openide.util [7.31.1.1 1 200912041610]
        org.openide.modules [7.13.1 200912041610]
...途中省略...
INFO [org.netbeans.core.ui.warmup.DiagnosticTask]: Total memory 2,147,483,647
終了前の処理
終了処理

因みに、このInstallerクラスは、manifest.mfファイルの以下の行で、NetBeansに読み込ませてるっぽいです

OpenIDE-Module-Install: okazuki/Installer.class