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?

È stato utile?

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

http://www.rgagnon.com/javadetails/java-0014.html

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top