2010年9月21日 星期二

IKVM.NET - Java 和 .NET 互通的工具

引用處

IKVM.NET 是在 .NET 上實作 JVM 的 Open Source Project。他可以讓你在 .NET 中使用 Java CLASS,也可以在 Java 中使用 NET。IKVM 主要包含三個部份:
1. .NET 上的 JVM 實作
2. .NET 實作版本的 Java Class Library
3. 賦予 Java 和 .NET 互通的工具


本文將透過 IKVM 進行簡單的互通測試


首先撰寫一個簡單的 Java 程式如下:

JavaToNet.java
public class JavaToNet
{
public static void main(String[] args)
{
System.out.println("This is a demonstration Program which\n");
System.out.println("shows the conversion of Java class to\n");
System.out.println("a .NET dll\n");
}

public String getAuthor(){
return "Chui-Wen Chiu(Arick)";
}

public static double AddNumbers(double a,double b){
double c = 0;
c = a + b;
return c;
}

// 產生 Exception
public static double hasException(){
return 1/0;
}
}


使用 Java SE5 的編譯器產生 CLASS
javac JavaToNet.java

然後使用 IKVM 產生 .NET Assembly
ikvmc -target:library JavaToNet.class

此時,我們已經擁有一個 .NET Assembly,接著撰寫一個簡單的測試程式如下:


dotNetTest.cs
using System;
using System.ComponentModel;
using System.Windows.Forms;
using TimeZone = java.util.TimeZone;
namespace WindowsApplication2
{
public class Program{
static void Main()
{
// 使用 java 內建類別
Console.WriteLine(TimeZone.getDefault().getDisplayName());

// 使用自訂類別靜態方法
Console.WriteLine(JavaToNet.AddNumbers(999, 888));

// 使用自訂類別物件方法
JavaToNet jt = new JavaToNet();
Console.WriteLine(jt.getAuthor());

// 引發 Exception
try{
JavaToNet.hasException();
}catch(System.DivideByZeroException ){
Console.WriteLine("Has Exception");
}
}
}
}


編譯程式

csc /r:JavaToNet.dll /r:IKVM.GNU.Classpath.dll dotNetTest.cs


執行OK

沒有留言:

張貼留言