Newsgroup: it.comp.java
Titolo: Perchè chiudendo questa swing il controllo non torna da solo sul prompt dei comandi ?

Vi post il codice di un'applicazione swing: ho notato che, quando
provo a spegnerla (premendo il pulsante di uscita ad "X" in alto a
destra), il controllo non passa automaticamente al prompt dei comandi,
ma questo rimane come fermo in attesa finchè non premo la combinazione
di tasti Ctrl + C.
Come posso ovviare a questo: come posso far si che, chiudendo questa
finestra swing, il controllo torni automaticamente al prompt dei
comandi ?
Ciao e grazie.
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
//
http://stackoverflow.com/questions/178667/does-jeditorpane-have-
charset-problems-when-showing-html
public class ScratchPad {
    public static void main(String args[]) throws Exception {
        String html ="<html>"+
"<head>"+				// "<meta http-equiv=\"Content-Type\" content=\"text/
html; charset=ISO-8859-1\"/>
"<title>Error 400 BAD_REQUEST</title>"+
"</head>"+
"<body>"+
"<h2>HTTP ERROR: 400</h2><pre>BAD_REQUEST</pre>"+
"<p>RequestURI=null</p>"+
"<p><i><small><a href=\"
http://jetty.mortbay.org
\">Powered by
jetty://</a></small></i></p>"+
"</body>"+
"</html>";
        JFrame f = new JFrame();
        JEditorPane editor = new JEditorPane();
        editor.setEditable( false );
        editor.getDocument().putProperty( "Ignore-Charset",
"true" );  // this line makes no difference either way
        editor.setContentType( "text/html" );
        editor.setText( html );
        f.add( new JScrollPane(editor,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
 
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) );
        f.pack();
        f.setVisible( true );
    }
}

 }
va sostituito con
        f.pack();
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible (true);

Giordano (21/10/2008):

Ok, ma non sempre è così. Quello che hai usato è una specie di
workaround per una chiusura quick-and-dirty: non fa altro che eseguire
un "System.exit(0);" alla chiusura di quella form, qualcosa di molto
simile al CTRL+C nella finestra del prompt dei comandi.
Quello che andrebbe fatto in realtà è agganciare un listener di tipo
java.awt.event.WindowListener al frame - basterebbe anche soltanto un
WindowAdapter in cui sovrapponi il metodo windowClosing .
Nell'implementazione di windowClosing provvederai a nascondere il frame
e rilasciare le risorse utilizzate.
Inoltre dovresti avere l'accortezza (vedi Swing Tutorial) di eseguire
il metodo setVisible all'interno di SwingUtilities.invokeLater la prima
volta che visualizzi il frame, per assicurarti che venga visualizzato
solo quando il sottosistema Swing è completamente inizializzato.
Detto questo, le modifiche che farei al tuo codice sono le seguenti:
Prima di tutto "f" deve essere dichiarato final per poterlo usare
all'interno di classi anonime (in questo modo garantisci che una volta
creato, "f" punterà sempre allo stesso oggetto per tutta la vita del
riferimento), prerequisito per windowClosing e invokeLater
   final JFrame f = new JFrame();
e poi
   f.pack();
   f.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
            f.setVisible(false);
            f.dispose();
         }
      });
   SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            f.setVisible(true);
         }
      });
Tieni conto che è codice scritto di getto perchè non avevo i miei
sorgenti sotto mano.
-- 
Scientology: se la conosci la eviti, se la conosci non ti uccide...
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx
 - 
http://www.xenu.net
(per rispondere personalmente leva IlDitoDalCulo)
---> 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 <---

          }
Questo era il problema, secondo me. Se manca l'istruzione "f.dispose()" 
dopo "f.setVisible(false)", il Frame non viene mai passato al GC, e 
quindi l'applicazione non termina anche se il Frame è diventato invisibile.