Domanda

C'è una libreria che posso usare con Java per l'ascolto utente logout e, eventualmente, altri eventi di Windows?(Meglio ancora se supporta più piattaforme!)

Ricordo di aver letto su una libreria di questo tipo di un certo numero di anni fa, ma non riesco a trovarlo adesso.Ho visto altri thread per fare sostanzialmente la stessa cosa usando Python con win32ts.

Anche meglio se free e/o open source.

Grazie.

Nota:Il candidato soluzione di utilizzo Runtime.getRuntime().addShutdownHook(Thread) non funziona correttamente con javaw.Io sto ancora cercando una soluzione con javaw.Vedere java bug id 4486580 e 4302814.Grazie --cam

È stato utile?

Soluzione

Penso che si desidera guardare Runtime.addShutdownHook().Questo vi dà l'ultimo disperato opportunità di fare le cose prima che la JVM si spegne.Questo consente di rilevare un effettivo logout in cui tutte le applicazioni sono di arresto, ma non devono solo passare temporaneamente gli utenti, lasciando il loro stato pronto a tornare.Tuttavia, come un avvertimento, qualunque cosa hai intenzione di fare durante il processo di arresto deve essere breve, dal momento che il sistema operativo può SIGKILL (o equivalente) su di voi in qualsiasi momento, che interrompe la JVM immediatamente.

Se questo non è ciò di cui avete bisogno, probabilmente stai andando ad avere bisogno di usare JNI per registrare un nativo ascoltatore.Come per gli altri eventi di windows, l'AWT libreria fornisce una serie di classi per l'attuazione del ascoltatori che più di una normale app sarebbe interessato.In questo caso, si potrebbe essere interessati a un FocusEvent.

Altri suggerimenti

La mia ipotesi migliore sarebbe quella di utilizzare un ShutdownHook.È possibile registrare un filo che viene richiamato non appena la JVM è stato arrestato.

Edit:
Se volete realizzare questo in windows, è possibile creare una finestra invisibile e di reagire sul WM_QUERYENDSESSION il messaggio che viene inviato dal sistema operativo all'utente di eseguire la disconnessione o di arresto del sistema.

Sembra che ci siano un sacco di persone che sono in esecuzione in questo problema.Anche se, la gente sul progetto Java, ovviamente, non considerare questo molto di priorità (Il biglietto originale è stato aperto quasi 10 anni fa).

Ho avuto un certo successo con il lavoro intorno pubblicato in bug 4486580 che utilizza nascosto JWindow.Tuttavia, questo è considerato inaffidabile.Ho trovato anche questo po ' po ' di discussione iniziata da cowwoc che ha pubblicato il lavoro intorno: http://forums.java.net/jive/thread.jspa?threadID=46716.Questo è meglio di niente, ma sarebbe bello per bloccare un windows logout fino a quando il programma ha sicuramente finito la pulizia.Non si vuole essere parte del processo quando il processo è terminato.

L'ultima bug aperto che circonda questo problema è 6798985.Sembra essere andato per lo più inosservato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top