This example shows how to create an instance of the Java Virtual Machine and the creation of an object of type test, a java class reproduced below: (Java Code) class test { test () { my_integer = 10; } public int my_integer; public static int my_static_integer; public void my_method (int arg_int, String arg_string) { my_static_integer = arg_int; my_integer = arg_int; } }

In order to run properly you need to read the library requirement .

Compiling the example

Since the example is using the test.java class, the first step is to compile the java class using the javac command line utility from the JDK. Once it is done, copy the test.class either into $ISE_EIFFEL\examples\Eiffel2Java\EIFGENs\classic\W_code or else into $ISE_EIFFEL\examples\Eiffel2Java\EIFGENs\classic\F_code, depending on your compilation mode (freezing vs. finalizing).

Running the example

Once the example is compiled, you can run it and here is the expected output: $ sample Creating instance of class `test' Value of `my_integer' is 10 Value of `my_static_integer' is 0 Calling `my_method' with (2, "String test") Value of `my_integer' after call to `my_method' is 2

Code description

(Eiffel Code) class EIFFEL_TO_JAVA inherit SHARED_JNI_ENVIRONMENT create make feature -- Creation make local class_test: JAVA_CLASS instance_of_class_test: JAVA_OBJECT fid: POINTER value: INTEGER j_args: JAVA_ARGS do --| Creation of the Java object class_test := jni.find_class ("test") create instance_of_class_test.create_instance (class_test, "()V", Void) --| Access to a public attribute fid := instance_of_class_test.field_id ("my_integer", "I") -- 'fid' contains the id of the field 'my_integer' -- 'value' contains the value of the field referenced -- by 'fid' value := instance_of_class_test.integer_attribute (fid) --| Access to a static attribute using directly the JAVA_CLASS fid := class_test.field_id ("my_static_integer", "I") value := class_test.integer_attribute (fid) --| Access to a static attribute using the attribute 'jclass' fid := instance_of_class_test.jclass.field_id ("my_static_integer", "I") value := instance_of_class_test.jclass.integer_attribute (fid) --| Access to the method 'my_method' -- Get the id of 'my_method' fid := instance_of_class_test.method_id ("my_method", "(ILjava/lang/String;)V") -- Create the set of arguments for 'my_method' create j_args.make(2) j_args.push_int (2) j_args.push_string("String test") -- Create the set of arguments for 'my_method' -- Call to the void method referenced by 'fid' instance_of_class_test.void_method (fid, j_args) end -- make end -- class EIFFEL_TO_JAVA

90ef17d4-8e23-34dd-1cb8-488533561dd4
cached: 05/23/2017 4:04:44.000 PM