アプリケーションの種類

ウィンドウアプリケーション Windows サービス コンソールアプリケーションの三種類のアプリケーションを作成することができます。

コンソール アプリケーション

コンソール コマンドプロンプト 用のアプリケーションです。オプション -g および -s のいずれも指定しない場合 コンソール アプリケーションになります。

コマンドプロンプト
C:¥>exewrap ConsoleSample.jar

ウィンドウ アプリケーション

オプション -g を指定すると ウィンドウ アプリケーションになります。たとえば JDK に付属しているサンプルプログラム SwingSet2.jar EXE にする場合は次のようにします。

コマンドプロンプト
C:¥>exewrap -g SwingSet2.jar

ウィンドウ アプリケーションには以下の特徴があります。

  • 標準出力/標準エラー出力がファイルに書き出されます。System.out.println() e.printStackTrace() などの出力を確認することができます。拡張フラグ NOLOG を指定すると このファイル出力機能を無効にすることができます。

  • キャッチされなかった例外をエラーダイアログで表示します。最上位の main メソッドでもキャッチされずに アプリケーション外まで伝播した例外をダイアログで表示します。同時に例外のスタックトレースがファイルに出力されるので アプリケーションの異常終了時の状態を把握しやすくなります。

  • スレッドが異常終了した場合もエラーダイアログを表示してアプリケーション全体を終了させます。スタックトレースのファイル出力がおこなわれます。マルチスレッド アプリケーションで 一部のスレッドが異常終了したままアプリケーションの動作が続行されてしまう危険性がなくなります。拡張フラグ IGNORE_UNCAUGHT_EXCEPTION を指定するとこの機能を無効にすることができます。

Windows サービス アプリケーション

オプション -s を指定すると Windows サービスになります。Windows サービスは ユーザーのログオン状態とは無関係に 常時動作するプロセスです。

コマンドプロンプト
C:¥>exewrap -s ServiceSample.jar

Windows サービスを作成する場合は メインクラスに次の 2 つのメソッドを実装する必要があります。

public static void start(String[] args)
public static void stop()

これらのメソッドは Windows のサービス コントロール マネージャー SCM によって呼び出されます。start メソッドはサービスを開始したときに stop メソッドはサービスを停止したときに呼び出されます。開発者は stop メソッドが呼び出された後に start メソッドが終了するように実装しなければなりません。start メソッドを無限ループで設計してしまうと サービスを停止できなくなります。実装例 ServiceSample.java を参考にしてください。

サービスのインストール

作成した Windows サービスに 引数 -install を指定して実行するとサービスとして登録されます。サンプルプログラム ServiceSample.jar をサービスとして登録する場合は次のようにします。

コマンドプロンプト
C:¥>exewrap.exe -s ServiceSample.jar C:¥>ServiceSample.exe -install

サービス実行時の引数を指定する場合は -install の後に続けて記述してください。サービス実行時の引数は start メソッドの引数 String[] args として渡されます。

コマンドプロンプト
C:¥>ServiceSample.exe -install foo bar

サービスのインストール時に サービスの構成を指定することもできます。サービス構成オプションは -install よりも前に記述します。たとえば サービスの実行アカウントを指定する場合は次のように指定します。サービス構成オプションの詳細は サービス構成オプション を確認してください。

コマンドプロンプト
C:¥>ServiceSample.exe -u Administrator -p mypassword -install

サービスの開始

他のサービスと同様に コントロール パネル管理ツールサービス から対象のサービスを選択して 開始 します。net start コマンドでを使用してサービスを開始することもできます。

コマンドプロンプト
C:¥>net start ServiceSample

サービスの停止

他のサービスと同様に コントロール パネル管理ツールサービス から対象のサービスを選択して 停止 します。net stop コマンドを使用してサービスを停止することもできます。

コマンドプロンプト
C:¥>net stop ServiceSample

サービスのアンインストール

サービスのアンインストールは サービスが停止している状態でおこなってください。また イベントビューアが開いている状態では 正しくサービスをアンインストールすることができないので注意してください。

コマンドプロンプト
C:¥>ServiceSample.exe -remove

Windows サービスとして作成したアプリケーションには以下の特徴があります。

  • 標準出力/標準エラー出力がイベントログに書き出されます。標準出力は 情報 としてイベントログに 標準エラー出力は 警告 としてイベントログに出力されます。出力はバッファリングされ System.out.flush() System.err.flush() を呼び出したときにイベントログへの出力が行われます。拡張フラグ NOLOG を指定すると このイベントログ出力機能を無効にすることができます。

  • キャッチされなかった例外をイベントログに出力します。例外がキャッチされずにアプリケーション外まで伝播すると 例外発生時のスタックトレースがイベントログに エラー として記録され サービスが停止します。

  • スレッドが異常終了した場合もイベントログに エラー としてスタックトレースを出力し サービスが停止します。拡張フラグ IGNORE_UNCAUGHT_EXCEPTION を指定するとこの機能を無効にすることができます。

  • 既定で Server VM を優先的に使用するように構成されます。Server VM がインストールされていない または 拡張フラグで CLIENTVM が指定された場合は Client VM を使用します。

デスクトップ ブリッジ UWP アプリ

exewrap 1.3.0 から Java アプリケーションのデスクトップ ブリッジ UWP アプリ化に対応しています。Tech Blog の記事で Java アプリの UWP 化手順について詳しく説明されています。参考にしてみてください。