scala + processing でアプレット作成


アプレットとしてもアプリケーション(jarをダブルクリックしたら起動する)としても使用できるようにする。

環境

コンパイル

import processing.core._
import processing.core.PConstants._


object Applet extends PApplet {
  var setupMethod = () => {}
  override def setup = setupMethod()
}

import Applet._

trait Main {
  Applet.setupMethod = setup _

  def setup {
    size(400, 300, JAVA2D)
    background(255, 0, 0)
    text("Hello World", 100, 100)
  }
}

object ApplicationMain extends Main {
  def main(args: Array[String]) {
    PApplet.runSketch(Array("title"), Applet)
  }
}

class AppletMain extends java.applet.Applet with Main {
  override def init {
    setLayout(null)
    Applet.init()
    add(Applet)
  }
}

scalac test.scala

jar化

  • test.mf
Manifest-Version: 1.0
Main-Class: ApplicationMain

jar cvfm Test.jar test.mf *.class

ProGuard化

  • proguard.jar

http://sourceforge.net/projects/proguard/files/proguard/4.6/

解凍して lib/proguard.jar を作業フォルダにコピーする。

homebrew でインストールした場合は /usr/local/Cellar/scala/2.8.1/libexec/lib/scala-library.jar にある。
他の環境でもscalaのインストール先のどこかにある。
そのままでもいいけど適当にホームディレクトリにコピペしててもいい。

  • core.jar

Mac版をダウンロードしてきて Processing.app/Contents/Resources/Java/core.jar にある。

  • classes.jar

mac では /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar にある。
windows では rt.jar という名前らしい。javaのインストール先で検索かければ出てくると思います。

  • test.pro
-dontnote
-dontwarn
-injars       Test.jar
-injars       /Users/alphaneet/lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties)
-injars       /Users/alphaneet/lib/jar/core.jar(!META-INF/MANIFEST.MF)
-libraryjars  <java.home>/../Classes/classes.jar
-outjars      TestOut.jar
-keep public class ApplicationMain {
  public static void main(java.lang.String[]);
}
-keep public class AppletMain
-keep public class * extends processing.core.PGraphics

java -jar proguard.jar @test.pro

scala-library.jar と core.jar と classes.jar は自分の環境のパスに直す。


設定ファイルの書き方についてはここらへんを参照
http://proguard.sourceforge.net/index.html#/manual/usage.html
http://www.scala-lang.org/node/3378

起動テスト

  • index.html
<html>
<body>

<applet code="AppletMain.class" archive="TestOut.jar" width=400 height=300>
</applet>

</body>
</html>

appletviewer index.html

  • アプリケーション起動

java -jar TestOut.jar

もしくは jar をダブルクリック