Download Latest Version JVC_For_C#.zip (37.7 kB)
Email in envelope

Get an email when there's a new version of JvmConnector for C#

Home
Name Modified Size InfoDownloads / Week
20110501 2012-08-06
ReadMe.txt 2012-08-06 3.4 kB
README 2011-05-01 1.4 kB
Totals: 3 Items   4.9 kB 0
New:
   // load jvm
   JavaConnector jvc = new JavaConnector();
   // now options can be customized.
   // jvc.InitializeJVM(new string[] { "-Djava.compiler=NONE", "-Djava.class.path=.;test.jar;", "-verbose:NONE" });
   jvc.InitializeJVM("test.jar");
   // work with jvm
   Java java = jvc.Connect();
   /*
    *   package ljy.test;
    *   public class TestMain {
    *   	public static int x = 0;
    *   	public static int a, b, c;
    *   	public static float d;
    *   	public static void main(String[] args) {
    *   		x = Integer.valueOf(args[0]) + 4;
    *   	}
    *   	public static void test(int[] args, float extra) {
    *   		a = args[0]; b = args[1]; c = (int)extra; d = extra;
    *   		x = a + b + c;
    *   	}
    *   }
    */
   JavaClass TestMainClass = java.LoadClass("ljy.test.TestMain");

   JavaStaticMethod methodMain = TestMainClass.GetStaticMethod("void", "main", "java.lang.String[]");
   JavaStaticField mInt = TestMainClass.GetStaticField("int", "x");
   JavaArray strarr = new JavaArray(new string[] { "2" });
   methodMain.VoidInvoke(strarr);
   int mVal = mInt.GetIntValue(); // get 6

   JavaStaticMethod methodTest = TestMainClass.GetStaticMethod("void", "test", "int[]", "float");
   JavaArray intarr = new JavaArray(new int[] { 5, 6 });
   methodTest.VoidInvoke(intarr, 4.4f);

   JavaStaticField aInt = TestMainClass.GetStaticField("int", "a");
   JavaStaticField bInt = TestMainClass.GetStaticField("int", "b");
   JavaStaticField cInt = TestMainClass.GetStaticField("int", "c");
   JavaStaticField dFloat = TestMainClass.GetStaticField("float", "d");
   Console.WriteLine(string.Format("x = {0}, a = {1}, b = {2}, c = {3}, d = {4}",
      mInt.GetIntValue(), aInt.GetIntValue(), bInt.GetIntValue(), cInt.GetIntValue(), dFloat.GetFloatValue())); // x = 15, a = 5, b = 6, c = 4, d = 4.4

   jvc.FinalizeJVM();

Old:
   // load jvm
   JavaInterface.JavaConnector jvc = new JavaInterface.JavaConnector();
   jvc.InitializeJVM("testjvm.jar");
   // work with jvm
   JavaInterface.JavaENV env;
   env = jvc.GetJavaENV();
   /*
    * package ljy.csharp.jvm;
    * class Hello {
    *    public static int m = 9;
    * }
    */
   int HelloClass = env.FindClass("ljy/csharp/jvm/Hello");
   int mInt = env.GetStaticFieldID(HelloClass, "m", "I");
   // mVal will get 9
   int mVal = env.GetStaticIntField(HelloClass, mInt);
   // unload jvm
   jvc.FinalizeJVM();

   // other examples:
   // create an Integer entity
   int intclass = env.FindClass("java/lang/Integer");
   int intinitmethod = env.GetMethodID(intclass, "<init>", "(I)V");
   int test = 5;
   IntPtr testptr = NativeMemory.NewIntObject(test);
   int intentity = env.NewObjectA(intclass, intinitmethod, testptr);

   // create a Date entity to get cureent time
   int dateclass = env.FindClass("java/util/Date");
   int dateinitmethod = env.GetMethodID(dateclass, "<init>", "()V");
   int dateentity = env.NewObject(dateclass, dateinitmethod, null);
   int date_gettime = env.GetMethodID(dateclass, "getTime", "()J");
   MessageBox.Show(string.Format("Time: {0}", 
      env.CallLongMethod(dateentity, date_gettime, null)));

Send e-mail to me when you want to discuss something with me.
Especially you find some bugs or new ideas on bridging Java to C#.
My e-mail address is dna2gle@gmail.com .

Thank you for your reading. And enjoy your programming.
Source: ReadMe.txt, updated 2012-08-06