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 in $ISE_EIFFEL\examples\Eiffel2Java\EIFGENs\classic\W_code or in $ISE_EIFFEL\examples\Eiffel2Java\EIFGENs\classic\F_code depending on your compilation mode (freezing vs. finalizing).
Running the example
One 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 is
local
class_test: JAVA_CLASS
instance_of_class_test: JAVA_OBJECT
fid: POINTER
value: INTEGER
j_args: JAVA_ARGS
do
class_test := jni.find_class ("test")
create instance_of_class_test.create_instance (class_test, "()V", Void)
fid := instance_of_class_test.field_id ("my_integer", "I")
value := instance_of_class_test.integer_attribute (fid)
fid := class_test.field_id ("my_static_integer", "I")
value := class_test.integer_attribute (fid) ...
fid := instance_of_class_test.jclass.field_id ("my_static_integer", "I")
value := instance_of_class_test.jclass.integer_attribute (fid)
fid := instance_of_class_test.method_id ("my_method", "(ILjava/lang/String;)V")
create j_args.make(2)
j_args.push_int (2)
j_args.push_string("String test")
instance_of_class_test.void_method (fid, j_args)
end
end