Comment fermer le processus java lorsque l'on quitte le programme ? - Java - Programmation
Marsh Posté le 16-07-2009 à 19:59:36
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
Marsh Posté le 16-07-2009 à 23:10:57
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
Marsh Posté le 17-07-2009 à 09:24:09
Tu devrais également arrêter ton thread de lecture.
Marsh Posté le 17-07-2009 à 10:10:15
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
J'ai rajouté:
Citation : JFrame frame = new JFrame("Quit" ); |
Dans
Citation : public static void main(String[] args) { |
Ce qui nous fait:
Citation : public static void main(String[] args) { } |
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
PS:
nerisson a écrit : Tu devrais également arrêter ton thread de lecture. |
Je vais essayer ta manip' maintenant
Marsh Posté le 17-07-2009 à 10:21:46
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().
Marsh Posté le 17-07-2009 à 10:48:10
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" ); installerReseau(); cadre.getContentPane().add(BorderLayout.CENTER, panneau);
|
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 ...
Marsh Posté le 17-07-2009 à 10:52:09
Oui regarde ça de près car ta solution n'est vraiment pas top à moins d'interdire à l'utilisateur d'utiliser la croix.
Marsh Posté le 17-07-2009 à 11:05:02
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
Marsh Posté le 16-07-2009 à 18:22:29
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
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):
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
Message édité par Profil supprimé le 16-07-2009 à 18:22:41