IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

probleme de pose avec un JButton


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Par défaut probleme de pose avec un JButton
    Bonjour à tous.
    J'ai un petit probleme avec un projet.
    C'est un serveur d'echange de fichier, mais je l'ai fait avec une interface graphique. Le fonctionnement:
    le client clique sur un boutton, le libellé du boutton est envoyé au serveur, puis le serveur envoie le fichier du meme nom. Mais probleme mon client s'execute et n'attend pas que l'on ai apputé sur le boutton. Donc a la fin il me met un pessage d'erreur comme quoi le fichier n'est pas trouvé, ce qui est normal, vu que l'on a pas pu choisir le boutton.
    voici le code du client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.util.Scanner;
     
    import javax.swing.JButton;
     
     
    public class client implements ActionListener {
     
    	public static String nomFichier = null;
     
    	public static void main(String[] args) throws Exception {
    		Fenetre fen = new Fenetre();
    		InetAddress ip = InetAddress.getLocalHost();
    		int port = 9333;
    		Socket client = new Socket(ip, port);
    	    BufferedWriter writer = null;
    		BufferedReader reader = null;
    		File fichier_ou_ecrire = null;
    		BufferedOutputStream writerFichier = null;
    		try {
    		 writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
    		//Scanner sc = new Scanner(System.in);
    		fen.Afficheur.setText("Veuillez écrire le nom fichier en mettant des _ a la place des espaces et en precisant son extansion\n");
    		//String nomFichier = sc.nextLine();
    		writer.write(nomFichier + "\n");
    		writer.flush();
    	     reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
    		 fichier_ou_ecrire = new File(nomFichier);
    		 writerFichier = new BufferedOutputStream(new FileOutputStream(fichier_ou_ecrire));
    		int OctetLu = 0;
    		fen.Afficheur.setText("Début du transfert du fichier: " + nomFichier);
    		while(true) {
    		byte[] tableauOctet = new byte[64000];
    			OctetLu = client.getInputStream().read(tableauOctet);
     
    			if(client.isConnected() == false || OctetLu == -1)
    				break;
     
    			writerFichier.write(tableauOctet,0,OctetLu);
    			writerFichier.flush();
    		}
     
    		System.out.println("l'ecriture s'est normalement déroulée");
     
    		}catch(Exception e) {
    			e.printStackTrace();
    			System.out.println("fatal error");
     
    		}finally {
    			try {
    				writer.close();
    				reader.close();
    				writerFichier.close();
    		}catch(Exception e) {
    			fen.Afficheur.setText("fatal error");
    		}
    		}
     
     
    }
     
    	public void actionPerformed(ActionEvent arg0) {
    		JButton evenement = (JButton) arg0.getSource();
    		String libelle = evenement.getText();
    		nomFichier = libelle;
    	}
     
    }
    le code de la fenetre au cas ou:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
     
    	public class Fenetre extends JFrame {
     
    		JPanel pan = new JPanel();
    		JPanel panBoutton = new JPanel();
    		JLabel Afficheur = new JLabel();
    		BorderLayout disposition = new BorderLayout();
    		GridLayout dispositionBoutton = new GridLayout(1,1);
    		JButton bouttonFinal12 = new JButton("final fantasy 12: revenant wings.nds");
    		public Fenetre() {
    			pan.setLayout(disposition);
    			pan.add(Afficheur, disposition.NORTH);
    			panBoutton.setLayout(dispositionBoutton);
    			panBoutton.add(bouttonFinal12);
    			pan.add(panBoutton, disposition.SOUTH);
    			client cl = new client();
    			bouttonFinal12.addActionListener(cl); //le boutton est ecouté par l'obejet appelant, c'est a dire la fenetre
    			this.setTitle("serveur d'echange");
    			this.setSize(300, 300);
    			this.setLocationRelativeTo(null);
    			this.setContentPane(pan);
    			this.setVisible(true);
    			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		}
     
    }
    Donc si quelqu'un savait comment faire en sorte que mon client s'arrete tant que l'utilisateur n'a pas cliqué sur le boutton, merci de poster^^

  2. #2
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    met tout le code dans ton actionPerformed pas dasn le main

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Par défaut
    Ok merci, c'est ce que j'ai fait. Mais maintenant, il me met un autre message d'erreur. Voici les 5classes du projet:

    serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import java.io.*;
    import java.net.*;
     
    public class serveur {
    	static int port = 9333;
     
    	public static void main(String[] args) throws Exception{
    		fenetreJava fen = new fenetreJava();
    		ServerSocket serveur = new ServerSocket(port); //initialisation du serveur sur l'adresse local et sur le port 9333
    		fen.Afficheur.setText("serveur initialisé, version prefinale");
    		Socket client;
    		while(true) {
    	    client = serveur.accept(); //on accepte le prochain client qui essaye de se connecter
    		Threadgestion c = new Threadgestion(client);
    		Threadgestion s = new Threadgestion(fen);
    		c.start();
    		}
     
    	}
     
    }
    le thread:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.net.Socket;
     
     
    public class Threadgestion extends Thread{
    private Socket client;
     fenetreJava serveur;
     
     public Threadgestion(fenetreJava reference) throws Exception {
    	 this.serveur = reference;
     }
     
    public Threadgestion(Socket s)throws Exception {
    		client = s;
    	}
     
    	public void run()  {
    		try {
    			// on cré reader, le buffer qui se cre a partir de l'objet inputstreamreader et qui recupere le flux du client
    			BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
    			//la on recupere le flux d'ecriture vers le client
    			String nomFichier;
    			nomFichier = reader.readLine();
    			File fichierAlire = new File("C:\\Documents and Settings\\yoann\\Mes documents\\final_fantasy.nds");
    			FileInputStream bufferLecture = new FileInputStream(fichierAlire);
    			FileInputStream bufferLectureTest = new FileInputStream(fichierAlire);
    			byte[] tableauOctet = new byte[64000];
    			int NbreOctet = 0;
    			int test = 0;
    			serveur.Afficheur.setText("Debut de l'envoie du fichier " + nomFichier + "\n à l'adresse " + client.getInetAddress());
    			while((test = bufferLectureTest.read()) != -1) {
    			NbreOctet = bufferLecture.read(tableauOctet);
    			if(NbreOctet == -1)
    				break;
    			client.getOutputStream().write(tableauOctet, 0, NbreOctet);
    			client.getOutputStream().flush();
    			tableauOctet = new byte[64000];
    			}
    			serveur.Afficheur.setText("Envoi du fichier terminé");
    			client.close();
    	}catch(Exception e) {
    		e.printStackTrace();
    	}
     
    	}
     
     
    }
    la fenetre serveur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import java.awt.BorderLayout;
    import java.awt.GridLayout;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
     
    public class fenetreJava extends JFrame {
    	JPanel pan = new JPanel();
    	JPanel panBoutton = new JPanel();
    	JLabel Afficheur = new JLabel();
    	BorderLayout disposition = new BorderLayout();
    	GridLayout dispositionBoutton = new GridLayout(1,1);
    	JButton bouttonFinal12 = new JButton("final fantasy 12: revenant wings");
     
    	public fenetreJava() throws Exception{
    		pan.setLayout(disposition);
    		pan.add(Afficheur, disposition.NORTH);
    		panBoutton.setLayout(dispositionBoutton);
    		panBoutton.add(bouttonFinal12);
    		pan.add(panBoutton, disposition.SOUTH);
    		this.setTitle("serveur d'echange");
    		this.setSize(300, 300);
    		this.setLocationRelativeTo(null);
    		this.setContentPane(pan);
    		this.setVisible(true);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
     
    }
    le client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    import java.awt.*;
    import javax.swing.*;
    import java.net.*;
    import java.io.*;
    import java.awt.event.*;
     
    public class client implements ActionListener {
     
    	InetAddress ip = InetAddress.getLocalHost();
    	int port = 9333;
    	Socket client = new Socket(ip, port);
     
    	public static String nomFichier = null;
    	Fenetre fenetre;
     
    	public client(Fenetre reference) throws Exception  {
    		this.fenetre = reference;
    	}
     
    	public static void main(String[] args) throws Exception {
    		Fenetre fen = new Fenetre();
     
    }
     
    	public void actionPerformed(ActionEvent arg0) {
    		JButton evenement = (JButton) arg0.getSource();
    		String libelle = evenement.getText();
    		nomFichier = libelle;
     
     
    	    BufferedWriter writer = null;
    		BufferedReader reader = null;
    		File fichier_ou_ecrire = null;
    		BufferedOutputStream writerFichier = null;
    		try {
    		 writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
    		writer.write(nomFichier + "\n");
    		writer.flush();
    	     reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
    		 fichier_ou_ecrire = new File(nomFichier);
    		 writerFichier = new BufferedOutputStream(new FileOutputStream(fichier_ou_ecrire));
    		int OctetLu = 0;
    		fenetre.Afficheur.setText("Début du transfert du fichier: " + nomFichier);
    		while(true) {
    		byte[] tableauOctet = new byte[64000];
    			OctetLu = client.getInputStream().read(tableauOctet);
     
    			if(client.isConnected() == false || OctetLu == -1)
    				break;
     
    			writerFichier.write(tableauOctet,0,OctetLu);
    			writerFichier.flush();
    		}
     
    		System.out.println("l'ecriture s'est normalement déroulée");
     
    		}catch(Exception e) {
    			e.printStackTrace();
    			System.out.println("fatal error");
     
    		}finally {
    			try {
    				writer.close();
    				reader.close();
    				writerFichier.close();
    		}catch(Exception e) {
    			fenetre.Afficheur.setText("fatal error");
    		}
    		}
     
    	}
     
     
    }
    et la fenetre client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
     
    	public class Fenetre extends JFrame {
    		JPanel pan = new JPanel();
    		JPanel panBoutton = new JPanel();
    		JLabel Afficheur = new JLabel();
    		BorderLayout disposition = new BorderLayout();
    		GridLayout dispositionBoutton = new GridLayout(1,1);
    		JButton bouttonFinal12 = new JButton("final_fantasy.nds");
     
    		public Fenetre() throws Exception{
    			pan.setLayout(disposition);
    			pan.add(Afficheur, disposition.NORTH);
    			panBoutton.setLayout(dispositionBoutton);
    			panBoutton.add(bouttonFinal12);
    			pan.add(panBoutton, disposition.SOUTH);
    			this.setTitle("serveur d'echange");
    			this.setSize(300, 300);
    			this.setLocationRelativeTo(null);
    			this.setContentPane(pan);
    			this.setVisible(true);
    			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    			client cli = new client(this);
    			bouttonFinal12.addActionListener(cli); //le boutton est ecouté par l'obejet appelant, c'est a dire la fenetre
    		}
    }
    maintenant le message d'erreur quand je clique sur le boutton

    java.lang.NullPointerException
    at Threadgestion.run(Threadgestion.java:33)

    Quelqu'un dai pourquoi ca ne marche pas???

    Merci d'avance

  4. #4
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    normal dans ton main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Threadgestion c = new Threadgestion(client);
    Threadgestion s = new Threadgestion(fen);
    tu lance le premier 'c' , et dans son run la variable serveur n'est pas initialisé ! tu devrai mettre dans ton constructeur les 2 parametres et non pas créer 2 Threadgestion différents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public Threadgestion(fenetreJava reference,Socket s) throws Exception {
    	 this.serveur = reference;
    client = s;
     
     }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Par défaut
    Alors la, merci beaucoup. J'y avais vraiment pas pensé, ca aurait été plus simple.
    Maintenant plus qu'un probleme d'affichage chez le client, il met debut de l'envoi du fichier quand le telechargement est terminé^^.

    Encore merci

  6. #6
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    ok remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    fenetre.Afficheur.setText("Début du transfert du fichier: " + nomFichier);
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SwingUtilities.invokeLater(new Runnable(){
    			@Override
    			public void run() {
    				fenetre.Afficheur.setText("Début du transfert du fichier: " + nomFichier);
    			}
    		});

Discussions similaires

  1. Probleme avec un Jbutton
    Par newholland dans le forum Applets
    Réponses: 3
    Dernier message: 10/05/2010, 09h44
  2. Grop probleme avec mon JButton
    Par Asmod_D dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 10/04/2007, 15h35
  3. [Kylix] Probleme de séparateur avec Kylix2 ?
    Par jeanphy dans le forum EDI
    Réponses: 4
    Dernier message: 10/02/2003, 16h41
  4. Réponses: 12
    Dernier message: 23/10/2002, 11h56
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo