Newsgroup: it.comp.java
Titolo: JNI problema con CallMathod

Ciao ragazzi, c'è qualcuno può darmi una mano sui JNI?
Ho un oggetto di prova che passo ad un metodo native.
Se invoco il metodo per la modifica di un avlore stringa funzica; se
invoco un metodo per modificare una vlore intero, mi va in errrore.
Il codice è identico a quello dei tutorial Sun che difatti mi funzicano.
Dove sbaglio?
Sotto ho postato anche i sorgenti.
Se qualcuno può darmi una mano....
Comunque ringrazio tutti quelli che anche solo letto questo Thread.
/---------------------------------------------------/
/----------------- Errore Generato -----------------/
/---------------------------------------------------/
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d6cd427, pid=2436,
tid=2952
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode, sharing)
# Problematic frame:
# V  [jvm.dll+0x8d427]
#
# An error report file with more information is saved as hs_err_pid2436.log
#
# If you would like to submit a bug report, please visit:
#   
http://java.sun.com/webapps/bugreport/crash.jsp
#
Vi posto i sorgenti
/---------------------------------------------------/
/********** Inzio codice classe prova **************/
/---------------------------------------------------/
package com.test;
public class RarElement
{
    private String nameOfFile = "";
    private int    inflatedSize = 0;
    private int    unflatedSize = 0;
 
    /**
     * Mtodo incriminato
     */
    public void setInflatedSize(int inflatedSize)
    {
        this.inflatedSize = inflatedSize;
    }
 
    /**
     * Metodo Che funzica
     */
    public void setNameOfFile(String nameOfFile)
    {
        this.nameOfFile = nameOfFile;
    }
 
    /**
     * Metodo incriminato
     */
    public void setUnflatedSize(int unflatedSize)
    {
        this.unflatedSize = unflatedSize;
    }
}
In realtà i metodi incriminati sono anche i vari get...
/-------------------------------------------------------------/
/************ Inizio codice C del JNI ************************/
/-------------------------------------------------------------/
/*
 * Class:     com_test_ListRarEntry
 * Method:    setRarElement
 * Signature: (Lcom/test/RarElement;)V
 */
JNIEXPORT void JNICALL Java_com_test_ListRarEntry_setRarElement
  (JNIEnv * env, jobject obj, jobject rarEntry)
  {
      jclass cls;
      jmethodID mid;
 
      /******************************************/
      /* Carico la classe dell'oggetto RarEntry */
      /******************************************/
      cls = (*env)->GetObjectClass(env, rarEntry);
      if(cls == NULL)
      {
          printf("Class Not Found [com.test.RarElement]\n");
          return;
      }
      printf(" - Class Loaded\n");
      /********************************************/
      /*     Invoco il metodo setNameOfFile   OK  */
      /********************************************/
      mid = (*env)->GetMethodID(env, cls, "setNameOfFile",
"(Ljava/lang/String;)V");
 
      if (mid == 0)
      {
          printf("Method [setNameOfFile(String)] Not Found into
[com.test.RarEntry] Class\n");
          return;
      }
      (*env)->CallVoidMethod(env, obj, mid, "Name setted by JNI");
      printf(" - Method [setNameOfFile] Invoked\n");
 
      /******************************************************/
      /*    Invoco il metodo setInflatedSize   Va in Errore */
      /******************************************************/
      mid = (*env)->GetMethodID(env, cls, "setInflatedSize", "(I)V");
 
      if (mid == 0)
      {
          printf("Method [setInflatedSize(int)] Not Found into
[com.test.RarEntry] Class\n");
          return;
      }
      (*env)->CallVoidMethod(env, obj, mid, 123456);
      printf(" - Method [setInflatedSize] Invoked\n");
  }
/--------------------------------------------------/
/------------- Codice Java del JNI ----------------/
/--------------------------------------------------/
package com.test;
public class ListRarEntry
{
    private RarElement rarElement = new RarElement();
 
    static{
        System.loadLibrary("com_test_RarEntryList");
    }
 
    public native void setRarElement(RarElement rarElement);
 
    public static void main(String[] args)
    {
        (new ListRarEntry()).setRarElement(lre.rarElement);
    }
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

