Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    JNI: passare un parametro da JAVA a C

    Ho creato una libreria (Object-)C per richiamare (su mac) alcune "ottimizzazioni" dell'interfaccia, in particolare per usare dei file chooser "a scheda" (vedere immagine sotto)




    Ora, io ho 2 metodi che sostanzialmente fanno la stessa cosa: uno apre la NSSheet filtrando i .jcc, un'altro metodo invece apre filtrando i .txt

    Vorrei fare in modo (ad esempio) che l'estensione venisse passata come argomento, in modo da scrivere un unico metodo multi-estensione.

    Problema: non riesco a capire come ottenere il parametro (un oggetto String) per poi convertirlo in array di char stile C (per poi creare un oggetto NSString di Objective-C). Qualche idea?

    Grazie
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Aggiungo qualche dettaglio.

    Questo è la signature del metodo nativo:

    JNIEXPORT void JNICALL Java_com_javastaff_jsheet_JSheetDelegate_nativeSho wSheet(JNIEnv *, jclass, jint, jobject, jobject, jobject);

    Questo invece è il corpo:

    codice:
     
    JNIEXPORT void JNICALL Java_com_javastaff_jsheet_JSheetDelegate_nativeShowSheet 
    (JNIEnv *env, jclass caller, jint type, jobject parent, jobject listener, jobject text) { 
        // Never assume an AutoreleasePool is in place, unless you are on the main AppKit thread
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        
        JSheetDelegate *jdel;
        
        // Take the parent component (passed via Java call) and get the parent NSWindow from it
        NSWindow *parentWindow = GetWindowFromComponent(parent, env);
        
        // It is extremely important to show the sheet from the main AppKit thread WITHOUT BLOCKING using performSelectorOnMainThread with a waitUntilDone value of NO
        
    ... 
    ...
        
        NSLog(@"Stringa passata = %@", text);
        
        [pool release];
    }
    Da java text viene passato come String ma una volta in objective-c salta tutto, provando a stampare da errore di accesso alla memoria :|
    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
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Domanda... se il parametro Java String viene passato al parametro C "text", perchè quest'ultimo è di tipo jobject e non jstring?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da LeleFT
    Domanda... se il parametro Java String viene passato al parametro C "text", perchè quest'ultimo è di tipo jobject e non jstring?


    Ciao.
    Intanto grazie per aver risposto

    Bella domanda... il file jni con il prototipo è stato generato in automatico con Xcode :master:
    Ho provato a mettere a mano jstring (in tutti i posti in cui è necessario) ma non cambia nulla
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.