2015-03-25 10 views
5

Sto lanciando JVM dal codice C++ tramite JNI. Ho un problema che quando esco dal mio processo C++ sembra che alcuni hook di shutdown da JVM non vengano eseguiti, e quindi alcune risorse temporanee sono ancora in giro, che nel mio caso particolare impediscono il lancio di JVM la prossima volta che apro un processo C++. Ho provato jvm-> DestroyJavaVM(), ma dopo che tutte le mie finestre di processo sono state chiuse, ho potuto vedere il processo in esecuzione. Qual è la migliore attesa per garantire che la JVM venga arrestata correttamente quando viene lanciata tramite JNI?Arresto corretto di JVM all'avvio da C++

Grazie!

risposta

1

Prima di tutto, jvm->DestroyJavaVM() non verrà restituito finché tutti i thread jvm non daemon non si saranno arrestati, non fa altro che attendere che si fermino, quindi è necessario interromperli in java.

In secondo luogo, System.exit causerà l'arresto dell'intero processo.

Così che cosa si ha realmente bisogno è controllare il codice Java che quale thread non è ancora fermato, ad esempio lo sfondo messaggio cappio del framework di interfaccia utente, come gwt o swing.

0

Il modo più semplice è chiamare System.exit tramite JNI.

Problemi correlati