2009-11-30 16 views
7

Voglio creare un'applicazione nativa per Mac OS X utilizzando Cocoa + Objective C ma ho bisogno di collegarmi a un'origine dati proprietaria, e per questo, il proprietario dell'origine dati fornisce solo la libreria Java. Quindi ho bisogno di importare in qualche modo questa libreria Java nel mio progetto e chiamare le funzioni sulle sue classi Java (oppure creare java wrapper attorno a questa libreria e poi chiamare il mio wrapper da objective-C).Chiamare la libreria Java da Objective C su Mac

Ora, come posso fare questo? La ricerca rapida su google mi porta a JNI ma non ho trovato nessun articolo/tutorial valido (attuale). Avrei davvero bisogno di qualche articolo HOW TO, come caricare questa libreria java, avviare la VM se necessario e come creare oggetti java e richiamare le funzioni su di essi. Davvero qualcosa di semplice e posso spostarmi da lì. Grazie.

Giusto per chiarire, ripeto: VOGLIO chiamare le funzioni Java da Objective-C, NON voglio chiamare funzioni native da Java.

risposta

9

Probabilmente stai cercando lo Invocation API, un angolo poco conosciuto di Java Native Interface (JNI) che ti consente di caricare il runtime Java in-process.

Detto questo, si potrebbe avere un tempo più semplice con un'applicazione di servizio Java che comunica con l'applicazione Objective-C su network sockets.

+2

+1 per l'utilizzo di processi separati. Probabilmente sarà molto più semplice scrivere un servizio in Java che comunica con l'origine dati e con il tuo obiettivo -C App. –

+0

Ciao Jeffrey, sì, ho visto quell'API Invocation, l'ho vista più da vicino.Questa idea dell'applicazione java e della mia app cacao che comunica tra le prese è abbastanza buona, ma preferirei iniziare questo java app in background quando la mia app di cacao non viene avviata come servizio per tutto il tempo, sai se è possibile qualcosa del genere? (ero uno sviluppatore .net da 6 anni, facevo mac roba solo per 4 mesi ora, quindi scusa se le mie domande sono stupide) – Michal

+1

Non c'è alcun motivo per cui l'app Objective-C non può avviare l'app Java come un'applicazione ogni volta che è necessario (come startin g qualsiasi altro binario). Potresti quindi utilizzare i socket per comunicare con esso. Potresti persino implementare un comando "Fine" per terminarlo da solo quando hai finito, in questo modo funziona solo quando ne hai bisogno. Dovrai posticipare alcuni secondi prima di collegarti ad esso, java è piuttosto lento per avviare le app. –

0

Stai cercando il ponte Java-Objective C, prova looking at this article o sul sito degli sviluppatori di Apple. Sappi che è deprecato, cioè non viene aggiornato con le modifiche a Cocoa. Ma se lo stai usando solo per un'API che passa i tipi di dati Java standard, dovresti essere OK.

+1

A partire da Snow Leopard, il bridge ora non esiste affatto :( –