Node:Jasper Method Call Example, Next:, Up:Jasper



Jasper Method Call Example

We begin with a small example.

     /* Simple.java */
     import se.sics.jasper.*;
     
     public class Simple {
       private String instanceDatum = "this is instance data";
     
       static int simpleMethod(int value) {
         return value*42;
       }
     
       public String getInstanceData(String arg) {
         return instanceDatum + arg;
       }
     }
     

Compile Simple.java (UNIX):

     % javac -deprecation \
       -classpath <installdir>/lib/sicstus-3.9.1/bin/jasper.jar Simple.java
     

On Windows this may look like (the command should go on a single line):

     C:\> c:\jdk1.2.2\bin\javac -deprecation
      -classpath "D:\Program Files\SICStus Prolog\bin\jasper.jar" Simple.java
     

The flag -deprecation is always a good idea, it makes javac warn if your code use deprecated methods.

     %%% simple.pl
     
     :- use_module(library(jasper)).
     main :-
        %% Replace '/my/java/dir' below with the path containing
        %% 'Simple.class', e.g. to look in the current directory use
        %% classpath(['.']).
        %% You can also use the CLASSPATH environment variable and call
        %% jasper_initialize(JVM)
        %% On Windows it may look like classpath(['C:/MyTest'])
        jasper_initialize([classpath(['/my/java/dir'])],JVM),
     
        format('Calling a static method...~n',[]),
        jasper_call(JVM,
                    method('Simple','simpleMethod',[static]), % Which method
                    simple_method(+integer,[-integer]), % Types of arguments
                    simple_method(42,X)), % The arguments.
        format('simpleMethod(~w) = ~w~n',[42,X]),
     
        format('Creating an object...~n',[]),
        jasper_new_object(JVM, 'Simple', init, init, Object),
     
        format('Calling an instance method on ~w...~n',[Object]),
        jasper_call(JVM,
                    method('Simple','getInstanceData',[instance]),
                    %% first arg is the instance to call
                    get_instance_data(+object('Simple'), +string,[-string]),
                    get_instance_data(Object, 'foobar', X1)),
        format('getInstanceData(~w) = ~w~n',['foobar',X1]).
     

Then, run SICStus:

     % echo "[simple],main." | sicstus
     SICStus 3.9 (x86-linux-glibc2): Fri Sep 24 17:43:20 CEST 1999
     Licensed to SICS
     % consulting /home1/jojo/simple.pl...
     [...]
     % consulted /home1/jojo/simple.pl in module user, 100 msec 26644 bytes
     Calling a static method...
     simpleMethod(42) = 1764
     Creating an object...
     Calling and instance method on $java_object(135057576)...
     getInstanceData(foobar) = this is instance datafoobar
     
     yes
     

This example performed three things.