はじめてのJa.NET

http://www.janetdev.org/
.NET向けの(まともな?)Javaである、Ja.NETを弄ってみることに。

class Hello 
{
    public static void main(String[] args)
    {
        System.out.println("Hello, World!");
        System.Console.WriteLine("Hello, Ja.NET");
    }
}

上記のように.NETとJavaのコンソール出力を混ぜて書いてみます。で、コンパイル

$ javac Hello.java

すると・・・

java.lang.Error: com.ibm.icu.charset.CharsetProviderICU
at java.nio.charset.Charset.searchConfiguredCharsets(Unknown Source)
at java.nio.charset.Charset.forNameInternal(Unknown Source)
at java.nio.charset.Charset.forName(Unknown Source)
at java.io.InputStreamReader..ctor(Unknown Source)
at org.eclipse.jdt.internal.compiler.util.Util.getInputStreamAsCharArray(Unknown Source)
at org.eclipse.jdt.internal.compiler.util.Util.getFileCharContent(Unknown Source)
at org.eclipse.jdt.internal.compiler.batch.CompilationUnit.getContents(Unknown Source)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Unknown Source)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Unknown Source)
at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Unknown Source)
at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Unknown Source)
at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Unknown Source)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Unknown Source)
at org.eclipse.jdt.internal.compiler.batch.Main.performCompilation(Unknown Source)
at org.eclipse.jdt.internal.compiler.batch.Main.compile(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.harmony.tools.javac.Compiler.main(Unknown Source)
at org.apache.harmony.tools.javac.Main.compile(Unknown Source)
at org.apache.harmony.tools.javac.Main.compile(Unknown Source)
at org.apache.harmony.tools.javac.Main.main(Unknown Source)

豪快に例外が飛びます。(^^;

例外の内容からエンコーディング関連のエラーだとわかります。多分、OSのデフォルト言語(ウチだとSJISかしら?)が対応していないと思われます。なので、

$ javac -encoding utf8 Hello.java

とりあえず、utf8を指定してあげると無事コンパイルできました。できたモジュールを実行すると、

$ java Hello
Hello, World!
Hello, Ja.NET

.NETのSystem.Console.WriteLineも問題なく動作していますね。

では、Ja.NETで作ったアセンブリ(?)をC#等から呼び出すにはどうすればよいのでしょうか?
実は、Ja.NETではbamという.class ->.dll変換を行うツールが付属しているのでした。では、早速・・・

$ bam
java.lang.Error: com.ibm.icu.charset.CharsetProviderICU
        at java.nio.charset.Charset.searchConfiguredCharsets(Unknown Source)
        at java.nio.charset.Charset.forNameInternal(Unknown Source)
        at java.nio.charset.Charset.forName(Unknown Source)
        at java.io.OutputStreamWriter..ctor(Unknown Source)
        at java.io.PrintWriter..ctor(Unknown Source)
        at org.apache.harmony.tools.bam.Main.main(Unknown Source)

・・・駄目でした。

bamはエンコーディング指定もできないので、ここでゲームオーバーです。(^^;
そのうち修正されると思うので、それまではC#->Java呼び出し実験は中断です。

ところで、Ja.NETはなんて呼べばいいのかしら。とりあえず、「じゃねっと」と呼んでいますが・・・

(追記)
bamエラーの回避方法を見つけました。

$ javac -encoding utf8 -bam:Hello.dll Hello.java

このようにjavac経由で呼びだせばOK。これで引き続き遊べそうです。(^^;