2011-10-16 3 views
0

Je travaille sur cette application qui nécessite le chargement de la bibliothèque native. le chargement de la classe qui initie le chargement de la bibliothèque native s'exécute sur un thread différent du thread principal. Lorsqu'une erreur se produit (une erreur est renvoyée), je m'attendrais à ce que vm se termine, mais dans ce cas, ce n'est pas le cas. certainement quand je ne peux pas charger la bibliothèque native, je ne dois pas continuer, parce que c'est le noyau de l'application. Je suppose que mon application ne se termine pas car le thread principal démarre au moins 3 threads. le thread de connexion - qui écoute si un gadget a été connecté, puis informe l'auditeur qu'il a été connecté ou déconnecté, et d'autres threads de gestion des ressources.Sortie de la JVM en cas d'erreur

Comment est-ce que je terminerais mon application quand le jls dit que l'application ne devrait pas essayer d'attraper des erreurs?

Répondre

1

Afin de répondre correctement à votre question, j'ai besoin d'en savoir plus sur les autres threads que vous avez engendrés. Peuvent-ils être définis sur des threads de type daemon? Si non, comment normalement quittez-vous normalement ces threads?

est ici un moyen de force brute (à l'intérieur du fil qui charge la bibliothèque native):

try { 
    methodToLoadLibrary(); 
    doWhatYouNeedToDo(); 
} finally { 
    System.exit(1); 
} 

mais cela suppose que vous quittez le l'ensemble du processus lorsque ce thread se termine.

Si vous avez une méthode qui peut être appelé à faire les fils se terminent gracieusement, vous pouvez remplacer l'appel System.exit(1); avec ceci:

Collection<Stoppable> sList; 
for(Stoppable s : sList) { 
    s.stop(); 
} 

Stoppable est l'interface de communication que vous souhaitez un arrêt progressif sur ces fils.

Il existe également des méthodes moins nettes comme l'appel Thread.stop sur les autres threads.

Questions connexes