probleme de fermeture d une application

capadona
probleme de fermeture d une application

bonjour je suis un jeune etudiant en informatique et je decouvre a peine java. Un projet sur lequelle je me suis lancer me pose un petit probleme je vais faire bref. j ai creer un chronometre qui arriver a 00h00min00s se ferme a l aide d un system.exit(0) ce chronometre est appelle dans une autre application le probleme qui se pose c est que le system.exit(0) ferme la machine virtuelle je me demande comment faire pour n arreter que l execution du chronometre et continuer l application parent. MErci pour votre aide.

jrebillat

Il manque des précisions. Ton chronomètre est-il dans une Thread ? C'est ce qu'il semble. Et ce que tu veux c'est arrêter la Thread sans stopper l'application, c'est ça ?

Le problème c'est que System.exit(0); ferme la machine virtuelle. Il faut donc ne stopper que la Thread. Tu peux faire un stop() dessus mais c'est déconseillé pour des raisons de stabilité.
Le mieux est de laisser la méthode run() de ta Thread arriver au bout, je crois ?

fredericmazue

Quote:
Le mieux est de laisser la méthode run() de ta Thread arriver au bout, je crois ?

Incontestablement
capadona

malheureusement mon chronometre n est pas dans un tread j ai ecris un programme basique car je suis vraiment debutant. j envois le code du chronometre

public class Chrono
 {
 //public int q=0;
 private static int heure=0,minute=0,seconde=10;
 
  public Chrono() {
  /* Le timer */
 int delais=1000;
 ActionListener tache_timer;

 /* création des composants */
 final JLabel Label1 = new JLabel(heure+":"+minute+":"+seconde); /* déclarer final car une classe interne va acceder à ce composant */
 JFrame fenetre = new JFrame("Chronomètre");
 JPanel Panel1 = new JPanel();
 

 /* Action réalisé par le timer */

 tache_timer= new ActionListener()
 {
 public void actionPerformed(ActionEvent e1)
 {
 if(seconde>=1){
 seconde--;
 if(seconde==0)
 {
	if(minute==0)
 { // q=1;
	//this.Dispose();
	
	System.exit(0);	
 } else{
		seconde=60;
		minute--;
 }
 }
 }
 
 Label1.setText(heure+":"+minute+":"+seconde);/* rafraichir le label */
 }
 };
 /* instanciation du timer */
 
 final Timer timer1= new Timer(delais,tache_timer);
timer1.start();

 /* Ajout des composants aux conteneurs avec formatage */

 Label1.setBorder(new EmptyBorder(10,135,10,10));
 fenetre.getContentPane().add(Label1,"Center");
 

 /* Afficher l'ihm */
  fenetre.pack();
 fenetre.setLocation(350,200); /* Déplacer la fenetre à ce nouvel emplacement */
 fenetre.setSize(300,100); /* dimension de la fenetre */
 fenetre.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 fenetre.show();
 
 
 }
 static void main(String[] args){
	new Chrono();
 } 
 }
[/list]
fredericmazue

Tu es débutant, on te pardonne, tout le monde l'a été :)

Tu as la tête dure et c'est moins amusant.
Thread ou pas jrebillat t'ai dit que System.exit() **arrête **la JVM. Qu'est-ce que tu attends pour enlever cette ligne de code et que la fonction puisse se terminer normalement ?

capadona

je l aurais bien enlever mais tant kan je l enleve j arrive pas a fermer mon programme j ai essayé un dispose() mais ca marche pas et j ai egalement essaye de rendre le chrono invisible ca marche pas non plus c est pour ca ke je l enleve pas. mon dernier recours c etais timer.stop() mais ca reconnais pas le timer declarer plus bas. et sans ca cela ne s arrete pas. la solution serait ppeut etre de creer un thread mais je comprend pas trop

capadona

mon vrai probleme c est arriver a arreter le chrono et le fermer sans utiliser le system.exit()

fredericmazue

Alors quoi ? Tu sais faire timer.start() et tu ne sais pas faire timer.stop() ? :D

capadona

si mais ca a pas marché. au faite fred si tu me permet de t appellé comme tu me conseil quoi pour renvoyer une valeur a la fin du chrono et je si tu peu modifier mon code et pour que le stop il marche je te demande bcp et j en suis desolé si tes trop occupé pas de soucis. En faite je developpe un petit jeu d aventure et la notion graphique m est inconnu c est pour ca que je suis sur c forum apres je pourrais te faire voir le resultat finals si ca t interesse. merci pour tout

fredericmazue

Quote:
si mais ca a pas marché.

Mais si ça marche. Tu as fait une erreur quelque part voilà tout.

Quote:
au faite fred si tu me permet de t appellé

Pas de problème, Fred, c'est mon nom :D
Quote:
tu me conseil quoi pour renvoyer une valeur a la fin du chrono et je si tu peu modifier mon code et pour que le stop il marche je te demande bcp

Je ne vais pas modifier ton code parce que c'est en forgeant qu'on devient forgeron et c'est en programmant qu'on devient programmeur. Donc tu dois modifier toi même. Il n'y a que comme ça qu'on peut apprendre. En tous cas, moi c'est comme ça que j'ai appris.
Mais je te donne très volontiers un conseil :)

Les gestionnaires d'événements retournent void, c'est à dire rien. C'est comme ça. Donc tu ne peux pas retourner de valeur. Alors que faire ? Dans le gestionnaire d'événement (actionPerformed) tu dois écrire/modifier cette valeur dans une variable qui sera un membre de la classe Chrono.

Quote:
En faite je developpe un petit jeu d aventure

Ah ces jeunes qui veulent tous coder un jeu :)
Ne le prends pas mal surtout, parce que je ne veux pas te peiner, et encore moins te décourager, mais il me semble qu'avant de pouvoir faire un jeu complet, tu dois prendre le temps de bien comprendre et maîtriser quelques bases fondamentales de Java.
capadona

merci fred de ts tes conseil je suis d accord avec toi. le jeu a la base c est un jeu pas compliquer du tout et c est a la fac qu on nous a demander de le faire pour juste verifier si on comprennait la base de la programmation objet genre les heritages les contracts etc. le chrono c est un plus ke j ai voulu y ajouter dans une mission ou j avais decider de faire qu on bout d un certain temp le joueur n ayant pas reussi la mission soit declarer perdant. mais n ayant jamais eu de cours sur le graphique(juste un peu de gtk) je suis perdu avec cette notion c est pour ca ke je me suis inscrit sur le forum. sinn j aurais jamais la pretention de vouloir faire un vrai jeu sans maitriser le langage.

fredericmazue

Quote:
je me suis inscrit sur le forum

Et tu y es le bienvenu. N 'hésites pas à poser d'autres questions :)

Gtk et Swing ont une philosophie assez différente. Il faut un peu de temps pour s'habituer aux interfaces et aux événements de Swing. Mais si tu as fait du Gtk alors pas de problème tu peux t'en sortir avec Swing aussi, il n'y a pas de raison.