Sembra un problema banale, ma si puo' incappare facilmente in
qualche errore nella scelta di dove chiamare le procedure di chiusura
di una applicazione, che in genere si occupano di salvare alcune
preferenze, gestire il salvataggio dei documenti e cose del genere,
prima del fatidico "System.exit(err)".
Intanto la cosa piu' importante e' mettere come al solito tutto
quello che serve in un metodo specifico, con un nome "intelligente" ed
una posizione in una classe comoda, anziche' mettere tutto il codice in
ogni handler di evento direttamente.
La seconda raccomandazione riguarda appunto dove e' opportuno
chiamare questo metodo di uscita. Nella maggior parte dei sistemi
operativi (Windows, Linux) e' sufficiente chiamarlo dall'handler
windowClosing del frame principale dell'applcazione e da quello della
voce del menu "Exit".
Cosi' non e' su Mac, che ignora bellamente il primo e non ha il secondo (in quanto il menu File non dovrebbe di norma contenere una voce "Exit" su Mac, e comunque non sarebbe sufficiente in quanto viene aggiunta una voce "Quit" comunque sul cosiddetto menu "Applicazione", ovvero quello tra il menu mela ed il primo menu application-defined). La soluzione migliore su Mac e' quella di aggiungere un ApplicationListener che chiama il metodo di uscita sull'handler "handleQuit". Purtroppo l'ApplicationListener e' una classe di Apple, contenuta nel package com.apple.eawt e non ho idea se essa sia ridistribuibile. Comunque non e' necessaria per la distribuzione dell'applicazione, ma solo per la compilazione, a patto che mettiate il listener in una classe a se' caricata solo nel caso si sia su Mac. Ad esempio, nel costruttore dell'oggetto principale dell'applicazione:
if(System.getProperty("mrj.version") != null) try { new MacAdapter(this); // versione mac } catch(Exception e) { // ... }
dove MacAdapter e' una classe derivata da com.apple.eawt.Application
che implementa anche com.apple.eawt.ApplicationListener. Questa classe
puo' essere utilizzata per gestire ad esempio il dialogo di About, il
quit, il drop dei file nell'icona del dock e altro...
Ultimi commenti