2010-09-30 13 views
5

Come sviluppatore C++, occasionalmente mi imbatto in librerie Java come iText, Batik, JasperReports e JFreeChart. In ogni caso, le librerie C++ cross-platform equivalenti sembrano essere molto meno mature, molto più costose o non disponibili.Utilizzo di Java da C++

È pratico utilizzare queste librerie Java dalla mia app C++ per generare report, grafici e simili? In tal caso, qual è l'approccio migliore per farlo?

  • Utilizzare JNI per incorporare una JVM all'interno della mia applicazione?
  • Utilizzare GCJ per compilare le librerie Java nel codice nativo?
  • Qualche altro metodo di integrazione di cui non sono a conoscenza?
  • Lasciare, dal momento che chiamare una libreria Java da C++ sarebbe troppo difficile per essere pratico, e invece investire i miei sforzi nella ricerca di librerie C++?
+1

Aggiungere scrittura del codice GUI in Java ed eseguirlo come librerie C++ come chiamate principali tramite JNI – Mark

+2

Fare attenzione: quando si inizia a portare più strumenti afferrando un linguaggio e un ambiente di esecuzione aggiuntivi, si finisce per rendere il codice un MOLTO più difficile da capire per il prossimo. Essendo stato il prossimo, posso dirti che c'è molto da dire per non essere troppo intelligente. –

risposta

3

Il metodo di integrazione meno complicato è l'approccio UNIX vecchia scuola: avviare un piccolo programma Java che esegue l'attività necessaria e comunicare con esso su STDIN/STDOUT.

Questo potrebbe non essere possibile in tutti i casi, ma è sicuramente per casi d'uso come PDF, SVG, reporting e creazione di grafici che in gran parte comportano la generazione di singoli documenti per il salvataggio o la visualizzazione.

Fare attenzione alla registrazione di log4j, slf4j, JUL, ecc. Se si segue questo approccio! Qualsiasi cosa che il programma Java scrive sullo standard potrebbe danneggiare il documento che si riceve nel programma C++. In questo caso, disabilitare la registrazione o utilizzare i socket potrebbe essere migliore.