Kikuchy's Second Memory

つくる楽しさをもっと伝えたい。プログラムを書いていて、わからなかったこと・気付いた事を書き留めています。

Clojure で GUI アプリを書いてみる (一旦の完成を見る・後編)

一昨日昨日(1)昨日(2)の続きです。


実行可能な jar ファイルはできました。
が、 Mac のアプリケーションらしくないですし、 Dock のアイコンも邪魔です。
理想なのは、

  • Mac のアプリケーションとして認識される
  • 起動後は Dock にアイコンが出ない

という形になること!
これを実現するためには、

  • jar をアプリケーションバンドル化する( jar を実行するパッケージを作成する)
  • java の実行時オプションで Dock のアイコンを消す( -Dapple.awt.UIElement=true を指定すると消える)

が同時にできれば良いということになります。
さっそくやってみましょう。
(ここからは Clojure は特に関係ないです。 java で開発した GUI プログラムを Mac 用にパッケージングしたい方向けの内容です)


動作環境

  • Mac OS X 10.7.5
  • インストールできる最新の Java
  • (もしかしたら、最新の Xcode が必要かも知れないです)


まず /usr/share/java/Tools/ にある『 Jar バンドラー』というアプリを開きます。
コマンドラインから開かなくても、 Finder から普通に起動しても大丈夫です。

$ open /usr/share/java/Tools/Jar\ Bundler.app

起動したら、以下のように設定します。
f:id:kikuchy:20130522022629p:plain
f:id:kikuchy:20130522022639p:plain

"Build Information" → "Options for Main" → "Main Class:" の "Choose..." から、先ほど作った実行可能 jar (今回は target/myforecast-0.1.0-SNAPSHOT-standalone.jar )を選択します。

JVM Version は別に適当で良いのですが、新しければ問題なかろう、ということで1.6以上を選択。

"Properties" → "Basic Properties" → "VM Options:" には、指定したい Java VM のオプションを入れます。
今回は Dock のアイコンを消したいので、ここに -Dapple.awt.UIElement=true と入れます。
起動時のスプラッシュ画面を指定したい場合もここに指定するときは、 -splash:hoge.png とかって指定すれば良いんでしょうかね。

最後に "Create Application..." を押下して、保存ダイアログでアプリの保存場所を指定すれば出来上がりです。


f:id:kikuchy:20130522025134p:plain













f:id:kikuchy:20130522025147p:plain



できたぁー!!!
ダブルクリックで実行できる! 動く!


f:id:kikuchy:20130522025456p:plain



ログイン項目にも追加できる!
やったー!!




そんな訳で当面の目標を達成する事ができました。
これで出かける前に、傘を持っていけば良いのか、日焼け止めを塗れば良いのか。画面の右上をちらっと見るだけでわかりますね!


しかし、実は足りない機能がまだあります。

  • 日付けをまたいでも表示が変わらない(起動時にしか天気予報を取りに行かない)
  • 予報の地域を選べない(現在は東京のみ)

機能だけでなく、エクスペリエンス的にも不満な点が。

  • アイコンをクリックしても、黒い部分が白くならない( Mac のシステムトレイアプリらしくない)
  • 「晴時々曇」と「晴のち雨」の表示アイコンが同じ(アイコンが少ない)
  • ネットに繋がらないと、キャッチされない例外が出る
  • 起動が遅い
  • 使っていないメソッドが残ったままになっている
  • テストコードを一行も書いていない

エクスペリエンス的な部分は後回しにするとして、足りない機能は以下のように実現できそうです。

  • タイマーで1時間ごとに表示を更新する
  • 「地域設定」のメニューを新設、クリックすると地域選択のダイアログが出るようにする(選択した地域は ~/.myforecastrc にでも保存する)

もうしばらくこの調子で続けてみようかなと思います。乞うご期待。



参考