Newsgroup: it.comp.programmare.win32
Titolo: JAVA: aiuto !

Ho un problema. Ho creato un applicazione Stand-Alone utilizzando classi
grafiche Swing.
Ho necessita' di sapere se un'istanza del mio applicativo è già in
esecuzione sulla stessa macchina,
per poi dare un messaggio ed impedirne un altro caricamento.  Questa cosa è
molto semplice in Visual Basic.
Si ottiene utilizando il metodo "app.prevInstance" che restituisce true se
un istanza è gia in esecuzione.
Come si fa questo in Java ?

Posta la tua richiesta su it.comp.java qui sei OT se non sbaglio
rhymes
rhy...@insieme.net
"La realtà delle cose si nasconde dietro 
la loro reale apparenza (Maestro Hiamuri)"


 Classe (i.e. analizzandone la command line).
Personalmente adotto di solito una di queste soluzioni:
- aprire una socket su una
porta definita nella tua applicazione (es. 9999) e all'avvio
dell'applicazione testi le socket in questione è già in uso oppure no (la
ritengo personalmente un pò bruttina come soluzione);
- la seconda soluzione è simile ma forse un pò più elegante, vale a dire
all'avvio dell'applicazione essa crea un
file con un path predefinito, tipo il file pid che alcuni demoni creano
quando vengono
eseguiti sulla macchina, all'interno del quale scrivi qualcosa, all'avvio
dell'applicazione testi se esiste questo file e se contiene ciò che hai
stabilito (es. un numero o altro), se non esiste dai il via libera
all'applicazione altrimenti la chiudi.
Ciao e spero di esserti stato utile.
Oliviero.

 writes:
O> Personalmente adotto di solito una di queste soluzioni:
O> - aprire una socket su una
O> porta definita nella tua applicazione (es. 9999) e all'avvio
O> dell'applicazione testi le socket in questione è già in uso oppure no (la
O> ritengo personalmente un pò bruttina come soluzione);
Più elegante e portabile del file in path predefinito.
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: sierra alfa india november tango AT echo november golf DOT india tango

 Più elegante e portabile del file in path predefinito.
Detta così non hai tutti i torti.
Oliviero

all'applicazione altrimenti la chiudi.
presumo che quando chiudi l'applicazione questa poi cancelli il file
"interruttore".
e se durante l'esecuzione il S.O. si blocca e devi riavviare, oppure
manca la corrente? il file non verrà cancellato e al prossimo avvio il
programma si rifiuterà di partire.
Anto
--
Antonio Cuni, 18 anni, studente
Brainbench Certification: 
Master C++: 4.44, higher than 97% of all previous test takers.
Visual Basic 5: 3.06, higher than 77% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688

 programma si rifiuterà di partire.
Verissimo, però dipende un pò dal tipo di applicazione che devi sviluppare,
nel caso di un demone che viene eseguito in batch e in modalità non
interattiva, magari non presidiata, la soluzione delle socket è sicuramente
più pulita, anche se ad esempio server molto diffusi quali Apache adottano
una tecnica simile a quella del lock file.
Nell'eventualità di un'applicazione interattiva, magari con interfaccia
utente, penso che nel caso di crash di sistema o di chisura non corretta di
quest'ultimo o dell'applicazione si possa prevedere una procedura di
recupero al successivo avvio dell'applicazione che quanto meno avverta della
condizione anomala e preveda un input da utente (y/n, "premere OK per
continuare", ecc.) per il ripristino delle condizioni corrette, o suggerisca
la soluzione del problema da realizzare a mano.
Oliviero.

la soluzione del problema da realizzare a mano.
hai perfettamente ragione. Però tu pensa alla legge di Murphy: e se
l'utente lancia un'altra istanza dell'applicazione quando ne è già
attiva una? Questa nuova istanza vede che è una situazione anomala e
chiede all'utente se desidera ripristinare le condizioni iniziali; a
questo punto modifica qualche file, che nel frattempo sono usati anche
dalla prima istanza... BOOM! :-))
scherzi a parte: se il programma dispone di un'interfaccia grafica si
potrebbe fare una ricerca tra le finestre aperte (FindWindow?) e
vedere se ne trova una con lo stesso titolo.
Probabilmente ci sono metodi più eleganti, ma studio win32 da pochi
giorni...
