in un'applicazione che fa uso di Swing, dovrei fare in modo che se un'utente
"KILLA"
il processo java dell'applicazione stessa dal TASK MANAGER,faccia una
determinata operazione prima di morire definitivamnete.
Come posso gestire la cosa?
Grazie
Nicola
--------------------------------
Inviato via http://arianna.libero.it/usenet/
> in un'applicazione che fa uso di Swing, dovrei fare in modo che se un'utente
> "KILLA"
> il processo java dell'applicazione stessa dal TASK MANAGER,faccia una
> determinata operazione prima di morire definitivamnete.
> Come posso gestire la cosa?
Guarda se questo ti aiuta
http://www-128.ibm.com/developerworks/ibm/library/i-signalhandling/
poi fammi sapere, cosi' mi regolo anch'io :P
Saluti
CarMas
C> cutoff ha scritto:
>> in un'applicazione che fa uso di Swing, dovrei fare in modo che se
>> un'utente "KILLA" il processo java dell'applicazione stessa dal
>> TASK MANAGER,faccia una determinata operazione prima di morire
>> definitivamnete. Come posso gestire la cosa?
C> Guarda se questo ti aiuta
C> http://www-128.ibm.com/developerworks/ibm/library/i-signalhandling/
C> poi fammi sapere, cosi' mi regolo anch'io :P
Io temo che serva a poco con Windows.
I segnali di cui parla l'articolo non credo vengano usati dalle
funzioni che Windows usa per terminare un thread dall'esterno.
Funzioni che peraltro non permettono nemmeno che vengano decrementati
i contatori di uso delle DLL, che quindi non vengono scartate fino al
reboot successivo...
--
/\ ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
//--\ | | \| | Integralista GNUslamico
\/ e allevatore di bug da competizione
Non è possibile una cosa del genere, perchè nel momento in cui il gestore
dei processi (e non parlo del Task Manager, ma di una parte del kernel di
Windows) prende il controllo della tua applicazione, succede questo:
- tutti i thread appartenenti all'applicazione vengono congelati
- Windows passa a chiudere forzatamente tutti gli handler rimasti aperti
(file, socket, device context, ecc...)
- tutte le aree di memoria "allocate al volo" vengono restituite al sistema
- il processo interessato e tutti i suoi thread vengono eliminati dalla
memoria e tolti dalla lista di schedulazione
L'unico modo per eseguire del codice nel momento in cui l'applicazione viene
arrestata forzatamente, secondo me, è di avviare una seconda applicazione
java che si connetta alla prima tramite socket (127.0.0.1 rappresenta sempre
l'indirizzo della macchina locale). Se la prima viene terminata, la seconda
riceve una segnalazione di "socket chiuso" dal sistema operativo e può
prendere provvedimenti. Per terminare la prima applicazione in modo pulito,
prima di uscire puoi inviare alla seconda una qualsiasi sequenza di byte che
in pratica dica "mi sto chiudendo di mia volontà".
Questo metodo ha anche l'indubbio vantaggio di essere portatile su tutti i
sistemi operativi.
--
Fermiamo scientology prima che sia troppo tardi!!!
http://xenu.com-it.net - http://xenu.freewinds.cx/ - http://www.xenu.net/
(per rispondere personalmente leva IlDitoDalCulo)