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.