Newsgroup: it.comp.java
Titolo: Terminare finestra

Salve a tutti,
potreste spiegarmi come mai questo minuscolo programma non termina?
import java.awt.Frame;
public class Untitled1 {
  public static void main(String[] args) throws Exception{
    Frame f = new Frame();
    f.show();
    Thread.sleep(1000); // solo per vedere la finestra
    f.dispose();
  }
}
Con la dispose() non dovrebbe chiudersi la finestra e fermare tutto? La
finestra sparisce, ma il programma non termina.
Grazie mille per l'aiuto! (se serve saperlo uso le jdk 1.3)
--
Huan

L'istruzione per terminare un programma è System.exit(0).
"Huan" <eag...@liberoDalloSpam.it> ha scritto nel messaggio
news:0HRta.96230$iy5.2...@twister2.libero.it...


potreste spiegarmi come mai questo minuscolo programma non termina?
Nel momento in cui mostri un frame con show() o con setVisible(true)
partono diversi thread "non daemon":
Thread[AWT-Shutdown,5,main]
Thread[AWT-Windows,6,main]
Thread[Java2D Disposer,10,main]
Thread[AWT-EventQueue-0,6,main]
Thread[DestroyJavaVM,5,main]
A questo punto per fermare il programma devi per forza ricorrere a
System.exit(0);

 L'istruzione per terminare un programma è System.exit(0).
Grazie mille; lo so, ma quello che intendo e' un'altra cosa:
se ad esempio eseguo questo codice
public static void main(String[] args) throws Exception
{
  System.out.println("prova");
}
il programma stampa "prova" e termina perche' ha finito quello che stava
facendo. Invece con l'esempio della finestra non termina: questo vuol dire
che sta ancora facendo qualcosa ed e' proprio quel qualcosa che devo
fermare.
Non posso usare la System.exit() perche' ho diverse finestre indipendenti e
il programma deve terminare solo alla chiusura dell'ultima.
--
Huan

 System.exit(0);
E' proprio l'unico modo? Ma con le jdk 1.4 il programma terminava
normalmente. Invece con le 1.3 non succede...
Tra l'altro devo usare le 1.3 perche' le 1.4 vanno in crash sul mio win 98.
Grazie mille.
--
Huan

Tra l'altro devo usare le 1.3 perche' le 1.4 vanno in crash sul mio win 98.
Ti assicuro che con 1.4 appena fai Frame.setVisible(true) partono,
esattamente come in 1.3, i thread AWT.
Fatti un'ArrayList delle finestre che hai aperto, ed implementa un
thread che, quando l'ArrayList è vuota, chiama System.exit().
E' l'unica, mi sa... 

Tra l'altro devo usare le 1.3 perche' le 1.4 vanno in crash sul mio win 98.
P.s.: con swing non hai questo problema; 
import javax.swing.*;
public class Swing
{
	public static void main(String[] args)
	{
		JFrame jf=new JFrame();
		jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		jf.setVisible(true);
	}
}

 }
Inizio a capire... Prima, quando usavo le jdk 1.4 usavo le swing e tutto si
chiudeva proprio come volevo; pensavo che fossero le jdk.
Pero' nemmeno questo codice che hai scritto tu termina da solo.
Stavo finendo la mia tesina tranquillamente quando sono iniziati tutti 'sti
problemi; lo stesso *identico* codice:
sul mio computer di casa con jdk 1.4 manda in crash la vm ogni tanto (?)
su un computer di scuola con jdk 1.4 funziona benissimo
su un computer di scuola con jdk 1.3 non termina più la vm per la storia
delle finestre.
Per continuare a lavorare ho rimesso le 1.3 sul mio computer; adesso non va
in crash ma ho il problema delle finestre. Non so piu' a cosa pensare!
Grazie mille per l'aiuto; spero di riceverne ancora perche' ne ho proprio
bisogno!
--
Huan

 Grazie mille per l'aiuto! (se serve saperlo uso le jdk 1.3)
A me il programma termina.
Ho usato JDK 1.4.
- Dario

 ha scritto nel messaggio
news:b98pg8$gkd$1...@grillo.cs.interbusiness.it...

Allora il fatto che il programma termini o no dipende dalle jdk? (1.3 no,
1.4 si)
Mi sembrava strano, ma a questo punto pare proprio di si...
--
Huan

Salve
forse arrivo tardi ma ci provo. Di solito si fa in modo di salvare in un 
Vector i riferimenti alle varie finestre o al limite in un int il numero 
di finestre aperte e se il contatore vale 1 si esegue la exit altrimenti 
si esegue una dispose, ecrementano il suddetto contatore. Il dove mettere 
il Vector o il contatore che devono esistere indipendentemente dalle 
finestre che crei o distruggi dipende dalla struttura della applicazione. 
Io l'ho usato e funziona. L'uso del Vector ti consente di implementare 
anche una funzione che chiede in una volta sola tutte le finestre aperte.
HIH
Lorenzo Cioni


 Lorenzo Cioni
Grazie, ma ho risolto il problema. O meglio ho capito che non č un problema:
sono passato a ritroso dalle jdk 1.4 alle 1.3; nelle prime i programmi
vengono terminati da soli quando non hanno piů finestre, thread, timer
(ecc...) attivi, mentre nelle 1.3 non succede.
per questo mi sono ritrovato tutti i miei programmi che non si chiudevano
piů e mi sono preoccupato, comunque ormai ho capito.
Grazie mille!
--
Huan