2009-11-30 3 views
7

Je souhaite créer une application Mac OS X native à l'aide de Cocoa + Objective C, mais je dois me connecter à une source de données propriétaire et pour cela, le propriétaire de la source de données fournit uniquement la bibliothèque Java. J'ai donc besoin d'importer en quelque sorte cette bibliothèque Java dans mon projet et d'appeler des fonctions sur ses classes Java (Ou créer un wrapper java autour de cette librairie puis appeler mon wrapper depuis l'objectif-C).Appel de la bibliothèque Java à partir d'Objective C sur Mac

Maintenant, comment puis-je faire cela? La recherche rapide sur google m'amène à JNI mais je n'ai trouvé aucun article/tutoriel (actuel) bon et actuel. J'aurais vraiment besoin d'un article HOW TO, comment charger cette librairie java, démarrer VM si nécessaire, et comment créer des objets java et appeler des fonctions dessus. Vraiment quelque chose de simple et je peux partir de là. Merci. Pour clarifier, je répète: Je veux appeler les fonctions Java d'Objective-C, je ne veux pas appeler les fonctions natives de Java.

Répondre

9

Vous recherchez probablement le Invocation API, un coin peu connu de Java Native Interface (JNI) qui vous permet de charger le runtime Java en cours de traitement. Cela dit, vous pourriez avoir un temps plus facile avec une application de service Java qui communique avec votre application Objective-C par-dessus network sockets.

+2

+1 pour utiliser des processus séparés Vous aurez probablement beaucoup plus de facilité à écrire un service en Java qui communique avec votre source de données et avec votre objectif -C-App –

+0

Salut Jeffrey, oui j'ai vu cette API Invocation, je vais y jeter un coup d'oeil de plus près.Cette idée de l'application java et mon application de cacao communiquant sur les sockets est assez bonne.Mais je préférerais démarrer ce java application sur fond quand mon application de cacao est commencé à ne pas fonctionner comme service tout le temps, savez-vous si quelque chose comme ça est possible? (J'ai été développeur .net pendant 6 ans, faire des trucs mac seulement pendant 4 mois maintenant, donc désolé si mes questions sont stupides) – Michal

+1

Il n'y a aucune raison pour que votre application Objective-C ne puisse pas démarrer l'application Java en tant qu'application chaque fois que nécessaire (comme startin g tout autre binaire). Vous pouvez ensuite utiliser des sockets pour communiquer avec lui. Vous pouvez même implémenter une commande "End" pour qu'elle se termine quand vous avez terminé, de cette façon elle ne fonctionne que lorsque vous en avez besoin. Vous devrez attendre quelques secondes avant de vous connecter, java est assez lent pour démarrer des applications. –

0

Vous cherchez le pont C Java Objectif, essayez looking at this article ou sur le site développeur d'Apple. Soyez conscient qu'il est obsolète, c'est-à-dire qu'il n'est pas mis à jour avec les changements de Cocoa. Mais si vous l'utilisez simplement pour une API transmettant des types de données Java standards, vous devriez être OK.

+1

À partir de Snow Leopard, le pont n'existe plus du tout :( –

Questions connexes