Pagina 1 di 8 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 74
  1. #1
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465

    Metodi nativi in Eclipse, da C a JAVA

    Oggi sono alle prese con i metodi nativi ed il manuale mi propone i seguenti codici e spiega come usarli ma non si sofferma sull'utilizzo di Eclipse e di altri eventuali programmi per la creazione dei singoli file di interscambio. Qualcuno mi può aiutare specificando per filo e per segno le operazioni da compiersi?

    listing A
    codice:
    // A simple example that uses a native method. 
    public class NativeDemo { 
      int i; 
      public static void main(String args[]) { 
        NativeDemo ob = new NativeDemo();
        ob.i = 10; 
        System.out.println("This is ob.i before the native method:" + 
                           ob.i); 
        ob.test(); // call a native method 
        System.out.println("This is ob.i after the native method:" + 
                           ob.i); 
      } 
      // declare native method 
      public native void test() ;
      // load DLL that contains static method 
      static { 
        System.loadLibrary("NativeDemo"); 
      } 
    }
    listing B
    codice:
    /* DO NOT EDIT THIS FILE - it is machine generated */ 
    #include <jni.h> 
    /* Header for class NativeDemo */ 
     
    #ifndef _Included_NativeDemo 
    #define _Included_NativeDemo 
    #ifdef _ _cplusplus 
    extern "C" { 
    #endif 
    /* 
     * Class:     NativeDemo 
     * Method:    test 
     * Signature: ()V 
     */ 
    JNIEXPORT void JNICALL Java_NativeDemo_test 
       (JNIEnv *, jobject); 
     
    #ifdef _ _cplusplus 
    } 
    #endif 
    #endif
    listing C
    codice:
    /* This file contains the C version of the 
       test() method. 
    */ 
     
    #include <jni.h> 
    #include "NativeDemo.h" 
    #include <stdio.h> 
     
    JNIEXPORT void JNICALL Java_NativeDemo_test(JNIEnv *env, jobject obj) 
    { 
      jclass cls; 
      jfieldID fid; 
      jint i; 
     
      printf("Starting the native method.\n"); 
      cls = (*env)->GetObjectClass(env, obj); 
      fid = (*env)->GetFieldID(env, cls, "i", "I"); 
     
      if(fid == 0) { 
        printf("Could not get field id.\n"); 
        return; 
      } 
     
      i = (*env)->GetIntField(env, obj, fid); 
      printf("i = %d\n", i); 
      (*env)->SetIntField(env, obj, fid, 2*i); 
      printf("Ending the native method.\n"); 
    }
    Sul manuale c'è scritto che prima di tutto bisogna creare NativeDemo.h usando il codice javah -jni NativeDemo e caricarlo con il C ma se scrivo il listato A in Eclipse ottengo il seguente errore:

    codice:
    Exception in thread "main" java.lang.UnsatisfiedLinkError: no NativeDemo in java.library.path
    	at java.lang.ClassLoader.loadLibrary(Unknown Source)
    	at java.lang.Runtime.loadLibrary0(Unknown Source)
    	at java.lang.System.loadLibrary(Unknown Source)
    	at NativeDemo.<clinit>(NativeDemo.java:17)


    Mai più un testo di Herbert Schildt...

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    A meno che tu non abbia assolutamente bisogno di usare metodi nativi lascia perdere...

    Ad ogni modo, hai ottenuto la dll? Dove l'hai messa? A cosa punta il tuo java.library.path?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Originariamente inviato da Alex'87
    A meno che tu non abbia assolutamente bisogno di usare metodi nativi lascia perdere...

    Ad ogni modo, hai ottenuto la dll? Dove l'hai messa? A cosa punta il tuo java.library.path?
    No, non sono riuscito ad ottenere la dll e non so a cosa punta il mio java.library.path.

    Praticamente il manuale mi propone il primo codice (public class NativeDemo...) poi mi consiglia di creare con java e quindi nel mio caso con Eclipse un file di nome NativeDemo.h che servirà, se ho capito bene a generare una DLL con VisualStudio. Per creare questo file .h bisogna usare la dicitura javah -jni NativeDemo che non funziona come tutte le diciture presenti nel libro...

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da peruzzo
    No, non sono riuscito ad ottenere la dll e non so a cosa punta il mio java.library.path.
    Senza la dll posizionata nel java.library.path il programma non potrà funzionare ovviamente...

    Originariamente inviato da peruzzo
    Praticamente il manuale mi propone il primo codice (public class NativeDemo...) poi mi consiglia di creare con java e quindi nel mio caso con Eclipse un file di nome NativeDemo.h che servirà, se ho capito bene a generare una DLL con VisualStudio. Per creare questo file .h bisogna usare la dicitura javah -jni NativeDemo che non funziona come tutte le diciture presenti nel libro...
    Ripeto, lascia perdere jni per il momento: a meno che tu non abbia intenzione di usarlo pesantemente è una perdita di tempo...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Mi potrebbe servire, voglio leggere tutto il manuale, non solo alcune parti. Ho trovato su youtube una guida e ho provato a seguirla pedestremente. L'utente scrive proprio javah -jni nomedellaclasse come c'è sul mio libro e ottiene questo benedetto file.h. Perché solo a me non funziona?

    Guarda qui:

    http://www.youtube.com/watch?v=Ki04XdNsNZY

    non mi funziona neanche javac... guarda verso 5:40... è quella la parte che non mi funziona...


  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Lo so che "javah -jni NativeDemo" funziona, ho usato ancora jni...

    Che errore ottieni quando scrivi sulla console javah -jni NativeDemo?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    "javah" non è riconosciuto come comando interno o esterno,
    un programma eseguibile o un file batch

    ovviamente non mi dispiacerebbe capire come creare il .h anche direttamenye da Eclipse sempre che sia possibile...

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da peruzzo
    "javah" non è riconosciuto come comando interno o esterno,
    un programma eseguibile o un file batch
    E cosa aspetti a dirlo?
    Aggiungi alla variabile d'ambiente PATH il percorso in cui si trova l'sdk (cerca nel forum, se ne è parlato un sacco di volte)


    Originariamente inviato da peruzzo
    ovviamente non mi dispiacerebbe capire come creare il .h anche direttamenye da Eclipse sempre che sia possibile...
    Forse esiste qualche plugin, non saprei.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    non capisco il consiglio... come si aggiunge ad una variabile d'ambiente un path?

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da peruzzo
    non capisco il consiglio... come si aggiunge ad una variabile d'ambiente un path?
    Attraverso il prompt dei comandi oppure da Risorse del computer->tasto destro->proprietà

    http://stackoverflow.com/questions/2...le-my-java-wor
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.