Come chiamare la funzionalità c ++ da Java
-
06-07-2019 - |
Domanda
Ho un programma Java che è principalmente GUI e mostra i dati scritti in un file xml da uno strumento da riga di comando c ++. Ora voglio aggiungere un pulsante al programma Java per aggiornare i dati. Ciò significa che il mio programma deve chiamare la funzionalità c ++.
È il modo migliore per chiamare il programma da Java tramite una chiamata di sistema? Il programma c ++ verrà compilato per mac os e windows e dovrebbe essere sempre nella stessa directory del programma java.
Vorrei generare un eseguibile, il programma c può essere archiviato nel vaso e chiamato dal mio programma?
Soluzione
Supponendo che non sia disponibile un metodo di comunicazione migliore (SOAP, ICE, Socket, ecc.), chiamerei l'eseguibile usando Runtime.exec ()
. JNI può essere usato per interfacciarsi direttamente, ma non lo consiglierei. No, non puoi mettere un eseguibile nel vaso. Bene, puoi, ma non puoi eseguirlo, poiché la shell non sa come eseguirlo.
Altri suggerimenti
Se si ha accesso al codice e si desidera un'esperienza "interattiva" con il programma esterno (ad es. effettuare chiamate, ottenere risultati, effettuare chiamate aggiuntive), esaminare JNI, che consente di chiamare il codice C o C ++ da un Java applicazione includendo & amp; collegando il succo JNI alla tua app C o C ++ con.
See:
http://en.wikipedia.org/wiki/Java_Native_Interface
http://www.acm.org/crossroads/xrds4-2/ jni.html
Se hai davvero bisogno di un'app " avvia l'app e ottieni risultati " tipo di soluzione, controlla Runtime.exec (), che ti consente di avviare un programma esterno & amp; catturare il suo output.
Vedi: http://www.javaworld.com /javaworld/jw-12-2000/jw-1229-traps.html?page=1
Puoi anche consultare API Java Native Access (JNA) .
Per rispondere alla tua ultima domanda, non puoi eseguire un eseguibile dal tuo vaso.
Tuttavia, puoi memorizzarlo nel tuo jar ed estrarlo in una directory / file temporaneo prima di eseguirlo (controlla la sua presenza la prima volta ed estrailo se necessario). Ciò semplifica in qualche modo la tua distribuzione, in quanto hai solo il vaso da distribuire e ti assicura di eseguire un eseguibile che corrisponde al tuo codice Java barrato.