Javaプログラミング デスクトップツールを作る¶
はじめに¶
デスクトップ上で動作するプログラム(ちょっとしたツール程度の比較的小さなプログラム)を、Javaで作成することに関連したメモです。
本格的なデスクトップアプリケーションについては本メモの対象外です。
Javaは、Webアプリケーション等のサーバーで動くプログラムを作成するプログラミング言語という認識が多いと思われます。ですが、もともとはデスクトップで動作するプログラムを作成するところから出発しており、Javaの最初のバージョンではGUI、ファイルI/O、ネットワークI/O、スレッド、文字列、日付、基本的なコレクション、設定ファイルといった標準APIが提供されていました。
本メモは、デスクトップ環境をWindowsマシン前提で記述していますが、Java SE標準の機能で作成するのでほとんど変更なくLinuxやMacOS Xでも適用できると思われます。
デスクトップツールの要件的なこと¶
デスクトップツールに求められる要件的なものを列挙しておきます。
- 配布が簡単
- 実行が簡単
- メモリやCPUを喰わない(控え目に使う)
- 設定が可能(次回起動時に前の設定を覚えている)
- 削除が簡単
- GUI
実行形式¶
デスクトップツールとして配布および実行に適したJavaプログラムの実行形式としては次の2つがあります。
- 単一の実行可能JARファイル形式
- ネイティブバンドル形式
両者を簡単にまとめると次の表になります。
項目 | 単一実行可能JAR | ネイティブバンドル |
---|---|---|
Java実行環境 | 予め所定バージョン以上がインストールされていること | 不要(インストーラに含む) |
インストール方法 | ファイルを1つコピーするだけ | インストーラーを実行 |
起動方法 | JARファイルを実行(ダブルクリック) | スタートメニューまたはデスクトップのショートカットを実行(クリック) |
アンインストール方法 | JARファイルを削除 | コントロールパネルのプログラムアンインストールから指定 |
配布サイズ | ~1MB | 50MB前後 |
実行可能JARファイル¶
Javaのクラスファイル群をJARファイルにまとめる際、JARマニフェストにプログラム起動時に呼ぶmainメソッドを持つクラス名を記述しておきます。
実行可能JARファイルは、javaコマンドにjarオプションで指定するほか、Windowsであればダブルクリックで実行可能です。
ただし、実行可能JARファイルを実行するには、あらかじめJava実行環境がインストールされている必要があります。Java実行環境のバージョンは開発時に指定したバージョン以上であることも必要です。
Java SE標準APIだけを利用したプログラムを記述すれば、JARファイル一つだけをコピーすれば実行可能です。
もし、Java SE標準API以外にサードパーティライブラリなどを利用したプログラムを記述すると、作成したJARファイルの他に、利用したサードパーティライブラリを一緒にコピーする必要が生じます。利用するライブラリはJARマニフェストに相対パスで記述されるので、コピーの際は、パスの関係を維持しておく必要があります。単一のJARファイルで作成したツールに比べ、利用者の手間が増えるので、デスクトップツールとしては単一のJARファイルが適しています。
ネイティブバンドル形式¶
OS固有の実行ファイル形式からJavaプログラムを実行します。Windows OSの場合、EXEファイルからJavaプログラムが実行されます。Java実行環境はバンドルに含まれるので、Java実行環境がないマシンでもJavaプログラムを実行可能です。ただし配布サイズは大きくなります。
ネイティブバンドル形式は、Windows OSの場合、MSI形式のインストーラーもしくはInnoSetupのEXE形式のインストーラーによってインストールすることが可能です。インストーラーからインストールすると、デスクトップおよびスタートメニューにプログラムの起動ショートカットが生成されます。
その他の実行形式¶
この他にも、アプレット形式、Web Start形式とプログラムの配布がサーバー側で一元化できる便利な形式がありますが、この両者はWebブラウザにプラグインとしてJava Plug-inを入れる必要があります。最近の動向としてWebブラウザはプラグインを廃止する方向1なので利用に制限があります。
1 Chromeは既に廃止、Firefoxは2016年に廃止のアナウンス、Microsoft Edgeは非搭載
プログラムの起動に関して¶
コマンドラインオプション¶
設定ファイル¶
プロパティファイル¶
リソースバンドル¶
ログ設定ファイル¶
環境変数¶
ユーザー別の設定¶
Preference API¶