Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1489 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Comment fermer le processus java lorsque l'on quitte le programme ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment fermer le processus java lorsque l'on quitte le programme ?

n°1905916
Profil sup​primé
Posté le 16-07-2009 à 18:22:29  answer
 

Bonjour.
Je suis en train de faire un programme en Java, un logiciel de chat précisément.
Le problème, c'est que lorsque je souhaite quitter le programme, en passant par la fameuse croix en haut à droite de la fenêtre, le processus java ne se ferme pas. Il reste actif. Ainsi, après plusieurs utilisation du programme, je me retrouve avec une dizaine de processus java qui tournent  :pt1cable:  
La question est simple: Que faut-il ajouter au code pour que, lorsque le programme se ferme, le processus java s'arrête également ?
 
Code source du programme (Client):
 

Citation :

import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class Komunicator {
 
      JTextArea entrants;
      JTextField sortants;
      BufferedReader lecture;
      PrintWriter ecriture;
      Socket sock;
 
      public static void main(String[] args) {
          Komunicator client = new Komunicator();
          client.go();
      }
 
      public void go() {
 
            JFrame cadre = new JFrame("Komunicator" );
            JPanel panneau = new JPanel();
            entrants = new JTextArea(15,50);
            entrants.setLineWrap(true);
            entrants.setWrapStyleWord(true);
            entrants.setEditable(false);
            JScrollPane zoneTexte = new JScrollPane(entrants);
            zoneTexte.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
            zoneTexte.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            sortants = new JTextField(20);
            JButton boutonEnvoi = new JButton("Envoi" );
            boutonEnvoi.addActionListener(new EcouteBoutonEnvoi());
            panneau.add(zoneTexte);
            panneau.add(sortants);
            panneau.add(boutonEnvoi);
            installerReseau();
 
            Thread threadLecture = new Thread(new LectureEntrants());
            threadLecture.start();
 
            cadre.getContentPane().add(BorderLayout.CENTER, panneau);
            cadre.setSize(400,500);
            cadre.setVisible(true);
 
} //Fin de la méthode go()
 
      private void installerReseau() {
 
             try {
                 sock = new Socket("127.0.0.1", 5000);
                 InputStreamReader isr = new InputStreamReader(sock.getInputStream());
                 lecture = new BufferedReader(isr);
                 ecriture = new PrintWriter(sock.getOutputStream());
                 System.out.println("Connexion établie" );
             } catch(IOException ex) {
                ex.printStackTrace();
             }
      } // Fin de la méthode installerReseau()
 
 
       public class EcouteBoutonEnvoi implements ActionListener {
          public void actionPerformed(ActionEvent ev) {
              try {
                 ecriture.println(sortants.getText());
                 ecriture.flush();
 
              } catch(Exception ex) {
                 ex.printStackTrace();
              }
               sortants.setText("" );
               sortants.requestFocus();
       }
  } // Fin de la classe interne
 
       
       public class LectureEntrants implements Runnable {
          public void run() {
                 String message;
                 try {
 
                   while ((message = lecture.readLine()) !=null) {
                     System.out.println("lire " + message);
                     entrants.append(message + "\n" );
 
                  } // Fin de la boucle while
             } catch(Exception ex) {ex.printStackTrace();}
     } // Fin de la méthode run()
} // Fin de la classe interne
 
} // Fin de la classe externe


 
Merci  :jap:


Message édité par Profil supprimé le 16-07-2009 à 18:22:41
mood
Publicité
Posté le 16-07-2009 à 18:22:29  profilanswer
 

n°1905951
souk
Tourist
Posté le 16-07-2009 à 19:59:36  profilanswer
 

tu peux peut etre regarder du cote de : http://java.sun.com/j2se/1.5.0/doc [...] n%28int%29
 
ou pour plus de control, tu utilises un WindowListener: http://java.sun.com/j2se/1.5.0/doc [...] tener.html


Message édité par souk le 16-07-2009 à 20:01:26
n°1905984
Profil sup​primé
Posté le 16-07-2009 à 22:38:24  answer
 

Merci, je vais essayer

n°1905992
liouan
Posté le 16-07-2009 à 23:10:57  profilanswer
 

sur ta frame principale, tu peux essayer la méthode:
 
JFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
 
je ne suis plus sur des noms, je te donne ça de mémoire

n°1906038
nerisson
Pic-pic
Posté le 17-07-2009 à 09:24:09  profilanswer
 

Tu devrais également arrêter ton thread de lecture.


---------------
Light is right
n°1906054
Profil sup​primé
Posté le 17-07-2009 à 10:10:15  answer
 

J'ai essayé la manip' de liouan. Le problème, c'est qu'il n'y a pas de changement xD
Je comprends pas, je suis vraiment un manche en Java :o

 

J'ai rajouté:

 
Citation :

JFrame frame = new JFrame("Quit" );
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

Dans

 
Citation :

public static void main(String[] args) {
          Komunicator client = new Komunicator();
          client.go();
      }


Ce qui nous fait:

 
Citation :

     public static void main(String[] args) {
          Komunicator client = new Komunicator();
          client.go();
          JFrame frame = new JFrame("Quit" );
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

     }

 

Je lance le programme, je le ferme par la croix et j'observe les processus qui tournent; java reste en mémoire -_-

 

... Des suggestions ?

 

Merci :D

 

PS:

nerisson a écrit :

Tu devrais également arrêter ton thread de lecture.


Je vais essayer ta manip' maintenant ;)

Message cité 1 fois
Message édité par Profil supprimé le 17-07-2009 à 10:12:49
n°1906065
Deamon
Posté le 17-07-2009 à 10:21:46  profilanswer
 


 :heink:  
Regarde ce que tu fais...
Ta frame là dans le main ne sert à rien car tu ne l'utilises pas !! La fenêtre qui s'affiche n'a rien à voir avec cette frame. Le setDefaultCloseOperation il faut le faire sur la frame que tu utilises évidemment donc celle qui se trouve dans go().


Message édité par Deamon le 17-07-2009 à 10:23:23
n°1906090
Profil sup​primé
Posté le 17-07-2009 à 10:48:10  answer
 

Ah. Pas grave car, J'AI FINALEMENT TROUVÉ !
J'utilise un nouveau bouton (je suis bête de ne pas y avoir pensé avant), qui ferme tout simplement l'application grâce à un System.exit(0)
Du coup maintenant tout fonctionne comme je le souhaite.

 

Mais je vais creuser quand même un peu pour que celà marche en passant par la petite croix.

 

@Daemon: Je vais essayer ça, merci beaucoup ;)

 

Edit: Voilà à quoi ressemble ma méthode go() maintenant:

 
Citation :

     public void go() {

 

           JFrame frame = new JFrame("Quit" );
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JFrame cadre = new JFrame("Komunicator" );
            JPanel panneau = new JPanel();                    
            entrants = new JTextArea(15,50);
            entrants.setLineWrap(true);
            entrants.setWrapStyleWord(true);
            entrants.setEditable(false);
            JScrollPane zoneTexte = new JScrollPane(entrants);
            zoneTexte.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
            zoneTexte.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            sortants = new JTextField(20);
            JButton boutonEnvoi = new JButton("Envoi" );
            boutonEnvoi.addActionListener(new EcouteBoutonEnvoi());
            panneau.add(zoneTexte);
            panneau.add(sortants);
            panneau.add(boutonEnvoi);
            JButton Quitter = new JButton("Quitter" );
            Quitter.addActionListener(new Quitter());
            panneau.add(Quitter);

 

           installerReseau();
 
            Thread threadLecture = new Thread(new LectureEntrants());
            threadLecture.start();

 

           cadre.getContentPane().add(BorderLayout.CENTER, panneau);
            cadre.setSize(400,500);
            cadre.setVisible(true);

 


} //Fin de la méthode go()

 

A noter que j'ai bien entendu viré la frame Quit dans le static void main.
Le problème, c'est qu'avec cette méthode, cela ne marche toujours pas en passant par la croix ...


Message édité par Profil supprimé le 17-07-2009 à 10:53:00
n°1906097
Deamon
Posté le 17-07-2009 à 10:52:09  profilanswer
 

Oui regarde ça de près car ta solution n'est vraiment pas top à moins d'interdire à l'utilisateur d'utiliser la croix.

n°1906105
Profil sup​primé
Posté le 17-07-2009 à 11:05:02  answer
 

Haaa, voilà c'est bon j'ai trouvé. Merci beaucoup Deamon de m'avoir orienté sur la bonne piste. En fait, voilà, j'ai rajouté tout simplement  

Citation :

cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

dans la méthode go()
Je ne sais pas pourquoi j'ai voulu créé une autre JFrame que celle qui était déjà créée. Fin bref, maintenant tout est rentré dans l'ordre.
Pour quitter le programme et tuer le processus java, le bouton Quitter fonctionne ainsi que la croix.
 
Merci à tous ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Comment fermer le processus java lorsque l'on quitte le programme ?

 

Sujets relatifs
Programme pour naviguer automatiquement sur des pages Web !VBA Premier programme assez coriace
Problème du connexion à BD Mysql dans un programme Ccréation d'un programme générant des nuages de point, et histogrammes
Redirection et envoi de données en POST avec applet Javaconnecter à une base de données Mysql via ODBC à partir d'un programme
Cacher les sources JSP/Javaexecuter un programme de cygwin dans l'environnement windows
[Resolu]Adaptation programme Windows vers Linux[java] Problème d'optimisation de traitements batch
Plus de sujets relatifs à : Comment fermer le processus java lorsque l'on quitte le programme ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR