2009-11-30 24 views
7

Quiero crear una aplicación nativa Mac OS X usando Cocoa + Objective C pero necesito conectarme a un origen de datos propietario, y para esto, el propietario de la fuente de datos solo proporciona la biblioteca Java. De modo que debo importar de alguna manera esta biblioteca Java en mi proyecto y llamar a las funciones en sus clases Java. (O crear java wrapper alrededor de esta biblioteca y luego llamar a mi contenedor desde el objetivo C).Llamar a la biblioteca Java desde Objective C en Mac

Ahora, ¿cómo puedo hacer esto? La búsqueda rápida en Google me lleva a JNI, pero no he encontrado ningún artículo/tutorial bueno y actual (actual). Realmente necesitaría algún artículo HOW TO, cómo cargar esta biblioteca java, iniciar VM si es necesario y cómo crear objetos Java y funciones de llamada sobre ellos. Realmente algo simple y puedo moverme desde allí. Gracias.

Solo para aclarar, repito: QUIERO llamar a las funciones de Java desde Objective-C, NO quiero llamar a funciones nativas de Java.

Respuesta

9

Probablemente esté buscando Invocation API, una esquina poco conocida de Java Native Interface (JNI) que le permite cargar el tiempo de ejecución de Java en proceso.

Dicho esto, puede que le resulte más fácil hacerlo con una aplicación de servicio Java que se comunica con su aplicación Objective-C sobre network sockets.

+2

+1 para usar procesos separados. Es probable que le resulte mucho más fácil escribir un servicio en Java que se comunique con su fuente de datos y con su objetivo. -C aplicación. –

+0

Hola Jeffrey, sí, vi esa API de invocación, la veré más de cerca. Esta idea de la aplicación Java y mi aplicación de cacao se está comunicando a través de los enchufes es bastante buena. Pero preferiría comenzar este java aplicación en segundo plano cuando mi aplicación Cocoa se inicia para que no se ejecute como servicio todo el tiempo, ¿sabes si algo así es posible? (Solía ​​ser desarrollador de .net durante 6 años, haciendo cosas de mac solo durante 4 meses, así que lo siento si mis preguntas son estúpidas) – Michal

+1

No hay razón para que su aplicación Objective-C no pueda iniciar la aplicación Java como una aplicación cuando sea necesario (Como iniciar g cualquier otro binario). Entonces podría usar enchufes para comunicarse con él. Incluso podría implementar un comando "Finalizar" para que termine cuando termine, de esta forma solo se ejecuta cuando lo necesita. Tendrás que demorar unos segundos antes de conectarte, java es bastante lento para iniciar aplicaciones. –

0

Está buscando el puente Java-Objective C, intente looking at this article o en el sitio para desarrolladores de Apple. Tenga en cuenta que está en desuso, es decir, no se mantiene actualizado con los cambios en Cocoa. Pero si solo lo está utilizando para una API que pasa tipos de datos Java estándar, debería estar bien.

+1

A partir de Snow Leopard, el puente ahora no existe :( –