Ho una DLL che contiene codice C legacy, chiamo questa dll tramite JNI, ma a volte il codice C si blocca e causa la terminazione della JVM. C'è un modo per evitare l'arresto di JVM? Posso gestire l'errore JNI e lasciare che la JVM sopravviva? :)Gestione di un arresto JNI
risposta
Se si tratta del codice C in arresto anomalo, l'unico modo per impedirgli di utilizzare JVM è impedire il primo arresto del codice C. Questo è uno dei principali pericoli/problemi che si incontrano quando si scrive codice JNI poiché rende la combinazione di Java e C un po 'più fragile rispetto a qualcosa che è scritto in puro Java.
Come ha detto Timo, non hai una vera alternativa se non quella di rendere robusto il codice JNI. Se non puoi farlo (per esempio se non hai il sorgente), forse potresti optare per una soluzione inter-processo. Inserire il codice JNI in un processo server separato, effettuare chiamate RMI o HTTP. Se si blocca, riavvia il "server" ma la JVM principale sopravvive. Ovviamente c'è un sovraccarico delle prestazioni e un aumento della complessità, ma forse puoi permetterti questo?
- 1. gestione evento di arresto del telefono in Android
- 2. JNI oggetti creazione e la gestione della memoria
- 3. Gestione "sicura" di un Mutex?
- 4. Come utilizzare un array di jobject? (JNI)
- 5. Arresto corretto di JVM all'avvio da C++
- 6. Utilizzo di JNI per caricare un'altra libreria JNI?
- 7. Manipolazione di ByteBuffer da JNI
- 8. Perdita di memoria JNI NewByteArray
- 9. Restituzione di jintArray da JNI
- 10. Lancio di un tipo lungo C++ su un JNI jlong
- 11. Devo JNI Staccare un thread allegato?
- 12. Come creare un oggetto con JNI?
- 13. valutazione arresto all'interno di un modulo
- 14. Arresto di un thread Java senza loop
- 15. Arresto di un oggetto PerformSelector: da eseguire
- 16. Arresto di un servizio Windows multithreading
- 17. Avvio e arresto di un timer PHP
- 18. JNI mantenendo un riferimento globale a un oggetto, accedendo ad esso con altri metodi JNI. Mantenere vivo un oggetto C++ su più chiamate JNI
- 19. Packaging Librerie JNI
- 20. JNI, chiamata metodo booleano
- 21. JNI GuaranteLocalCapacity - PERCHÉ?
- 22. Applicazione profili JNI
- 23. Mac + jni + java
- 24. JNI - multi-thread
- 25. JNI: Crea HashMap
- 26. Arresto di ToneGenerator Android
- 27. jni starter question
- 28. JNI proguard offuscamento
- 29. Arresto di Python incorporato
- 30. Programmazione JNI con Delphi