[[Property:title|Eiffel2Java Sample]]
[[Property:weight|1]]
[[Property:uuid|90ef17d4-8e23-34dd-1cb8-488533561dd4]]
This example shows how to create an instance of the Java Virtual Machine and the creation of an object of type <eiffel>test</eiffel>, a java class reproduced below: 
<code lang="java">
(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;
	}
}
</code>

In order to run properly you need to read [[Eiffel2Java|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:
<code>
$ 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>

===Code description===
<code>(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</code>




