Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #25236

Re: JNI and GetFieldID

From Steven Simpson <ss@domain.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: JNI and GetFieldID
Date 2013-09-06 22:34 +0300
Organization A noiseless patient Spider
Message-ID <8bnpfa-417.ln1@s.simpson148.btinternet.com> (permalink)
References <l0a6jn$9t4$1@node1.news.atman.pl> <gb2pfa-s33.ln1@s.simpson148.btinternet.com> <l0d1ak$5s5$1@node1.news.atman.pl> <l0d7po$cqp$1@node1.news.atman.pl>

Show all headers | View raw


On 06/09/13 21:44, Borneq wrote:
> public interface ICallback {
>        void OnPercent(int percent);
>        void OnPercentEx(CmplxStruct cs);
> }

While in Java, you should use Java conventions, e.g. onPercent for a 
method name.  Can't say I'm a fan of prefixing "Callback" with "I" to 
show it's an interface either.

> public class CmplxStruct {
>        int fieldI;
>        String str;
> }

CmplxStruct?  Ky, 'll tk tht s jst n ex.

> How place number and string?

> jmethodID mid;
> mid = env->GetMethodID(cls, "OnPercentEx", "(LCmplxStruct;)V");
> env->CallVoidMethod(param1, mid, SOMETHING);

> how fill SOMETHING?

Never learned to do that - looks too error-prone.  Instead of mucking 
around in JNI, creating objects, accessing fields, etc, I prefer to do 
as much as I can in Java, then declare the native methods as taking the 
already dismantled fields as separate arguments.

You could do similar for a callback.  Write a private static method to 
do the fiddly stuff:

   private static void callBack(ICallback dest, int i, String s) {
       CmplxStruct obj = new CmplxStruct();
       obj.fieldI = i;
       obj.str = s;
       dest.OnPercentEx(obj);
   }

Now, in JNI, you use something like:

   jobject dest = ...;
   jint i = ...;
   jstring s = ...;

   mid = env->GetStaticMethodID(cls, "callBack", "(LICallback;ILjava/lang/String;)V");
   env->CallStaticVoidMethod(dest, i, s);


-- 
ss at comp dot lancs dot ac dot uk

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

JNI and GetFieldID "Borneq" <borneq@antyspam.hidden.pl> - 2013-09-05 17:05 +0200
  Re: JNI and GetFieldID Mark <i@dontgetlotsofspamanymore.invalid> - 2013-09-06 10:25 +0100
  Re: JNI and GetFieldID Steven Simpson <ss@domain.invalid> - 2013-09-06 16:36 +0300
    Re: JNI and GetFieldID "Borneq" <borneq@antyspam.hidden.pl> - 2013-09-06 18:53 +0200
      Re: JNI and GetFieldID "Borneq" <borneq@antyspam.hidden.pl> - 2013-09-06 20:44 +0200
        Re: JNI and GetFieldID Steven Simpson <ss@domain.invalid> - 2013-09-06 22:34 +0300
          Re: JNI and GetFieldID "Borneq" <borneq@antyspam.hidden.pl> - 2013-09-06 23:06 +0200
      Re: JNI and GetFieldID "Borneq" <borneq@antyspam.hidden.pl> - 2013-09-07 22:27 +0200
        Re: JNI and GetFieldID Steven Simpson <ss@domain.invalid> - 2013-09-08 10:24 +0100
          Re: JNI and GetFieldID "Borneq" <borneq@antyspam.hidden.pl> - 2013-09-08 12:29 +0200
            Re: JNI and GetFieldID "Borneq" <borneq@antyspam.hidden.pl> - 2013-09-08 22:45 +0200
            Re: JNI and GetFieldID Steven Simpson <ss@domain.invalid> - 2013-09-13 13:31 +0100
              Re: JNI and GetFieldID "Borneq" <borneq@antyspam.hidden.pl> - 2013-09-14 18:50 +0200
              Re: JNI and GetFieldID "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2013-09-19 15:02 +0100

csiph-web