Mac OS X/Programming/Java

提供: fukudat
移動: 案内検索


目次

Javaプログラムのアプリケーションバンドルの作り方

古いやり方

  1. 以下のようなディレクトリ階層を作る.まず最上位のディレクトリ名は "アプリケーション名.app" という名前でなければならない.その直下に Contents ディレクトリを作成し,その下に MacOS, Resources を作る.さらにResourcesディレクトリの下にJavaディレクトリを作る.
    • YourApplicationName.app/
      • Contents/
        • MacOS/
        • Resources/
          • Java/
  2. /System/Library/Frameworks/JavaVM.framework/Versions/Current/Resources/MacOS/ディレクトリからJavaApplicationStubファイルをコピーして上記で作成したアプリケーションバンドル中のMacOSディレクトリに置く.
  3. Contentsディレクトリ内にInfo.plistファイルを作成する.既存のJavaアプリケーション(例えば,Jar Bundler)からコピーしてそれを変更するか,スクラッチから作っても良い.MainClassキーなどに正しい値を設定しなければ,アプリケーションは起動しない.
  4. Contentsディレクトリ内にPkgInfoファイルを作成する.これはプレインテキストファイルである.もしADCにcreator codeを登録していなければ,中身はAPPL????とする.もし登録しているなら????をそのコードに変更する.
  5. アプリケーションのアイコンファイルをContents/Resources/ディレクトリに置く./Developer/Applications/Utilitiesにあるicon composerがアイコンを作成するのに役に立つはず.
  6. Javaプログラムの .jar, .classファイルをContents/Resources/Java/ディレクトリに置く.
  7. /Developer/Tools/にあるSetFileを使って Finder の bundle bit をセットする.例えば,
$ /Developer/Tools/SetFile -a B YourApplicationName.app. 

以上のステップで,ダブルクリックでJavaプログラムが起動できるアプリケーションバンドルが作成されるはず[1]

今のやり方

Oracleが配布しているAppBundler[2]を用いる.

  1. appbundlerはOracle JDK for the Macにはバンドルされていない.java.netからappbundler-*.jarをダウンロードする.ドキュメントはここにある.
  2. ダウンロードした appbundler-*.jar をプロジェクトフォルダの(例えば)lib/ ディレクトリに置く.
  3. 以下のような build.xml を作り,ant を実行すると application bundle が作成される.
<?xml version="1.0" encoding="UTF-8"?>
<project name="project-name" default="create-appbundle" basedir=".">        
    <import file="nbproject/build-impl.xml"/>

    <taskdef name="bundleapp"
             classname="com.oracle.appbundler.AppBundlerTask"   
             classpath="lib/appbundler-1.0.jar" />

    <target name="create-appbundle">
        <bundleapp outputdirectory="dist"
            name="ApplicationName"
            displayname="Display Name"
            identifier="com.CompanyName.ApplicationName"
            mainclassname="com.CompanyName.ApplicationName.MainClass">
            <classpath file="lib/Application.jar" />
        </bundleapp>
    </target>
</project>

SWT の場合

https://www.eclipse.org/swt/macosx/ を参照する.

SWT invalid thread access

SWTを使うJavaプログラムをMac OS Xで起動すると,

***WARNING: Display must be created on main thread due to Cocoa restrictions.
Exception in thread "main" org.eclipse.swt.SWTException: Invalid thread access
	at org.eclipse.swt.SWT.error(Unknown Source)
        ...

というエラーになる.

これを回避するには,-XstartOnFirstThread というオプションをつけてJVMを起動する. bundledの場合は,Info.plist[3] にキー StartOnMainThreadtrue をセットする.

脚注

  1. Making a Java Application Bundle: https://developer.apple.com/library/mac/documentation/Java/Conceptual/Java14Development/03-JavaDeployment/JavaDeployment.html#//apple_ref/doc/uid/TP40001885-209043-TPXREF123
  2. Packaging a Java App for Distribution on a Mac: http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html
  3. Java Info.plist Key Reference for Mac https://developer.apple.com/library/mac/documentation/Java/Reference/Java_InfoplistRef/Articles/JavaDictionaryInfo.plistKeys.html
個人用ツール
名前空間

変種
操作
案内
ツールボックス