Java thread pleeease aidé moi

Fermé
kribac Messages postés 104 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 28 avril 2016 - 15 févr. 2011 à 18:44
flo13142 Messages postés 71 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 21 février 2011 - 16 févr. 2011 à 09:44
Bonjour a ts é a tte

Bon j'ai fé ce jeux " piérre papier ciseau " avec 2 joueur « client - seveur » et ça marche trés bien ,mais ce que je veux menen c de maitre un thread pr que quan j'aurré plusieur client je peux envoyé la donné du serveur au tt les autre clients au méme temps c a dire en parallèle « et c le travaille du thread»

Voila la classe Serveur ,vs n'avez pas besoin d la comprendre tte ^^ fo lisé selmen ce que j écri comme comentaire en gras , et me dire comment faire le thread j sé k'il fo k j'ajoute 1 tt petit truc run ou ché pa j connais rien sur la syntaxe des thread

voila ma classe

« Classe Serveur »

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

import javax.swing.*;
import javax.xml.bind.Marshaller.Listener;

public class Serveur extends JFrame implements ActionListener{

public JButton b1;
public JTextField f1;
public static JLabel joueur1,get1,rs;
static String res1;
static String res2;

public static int port = 32007;

public Serveur() {

setSize(275,255);
setTitle("Serveur");
setLocationRelativeTo(null);
Container cont = getContentPane();

JPanel p1 = new JPanel();
p1.setLayout(null);
p1.setBackground(Color.red);

Font font = new Font("Arial", Font.BOLD , 17);


joueur1=new JLabel("seurveur");
joueur1.setBounds(20, 00, 150, 30);
joueur1.setForeground(Color.white);
joueur1.setFont(font);

JLabel lab = new JLabel(new ImageIcon("src\\ar.png"));
lab.setBounds(0, 0, 270, 230);

lab.setVisible(true);


get1=new JLabel();
get1.setBounds(157, 35, 200, 30);
get1.setForeground(Color.white);
get1.setFont(font);

rs=new JLabel();
rs.setBounds(30, 70, 200, 30);
rs.setForeground(Color.white);
rs.setFont(font);

b1 = new JButton("Ok");
b1.setBounds(90, 35, 50, 30);
b1.addActionListener(this);

f1 = new JTextField();
f1.setBounds(20, 35, 50, 30);
f1.setForeground(Color.red);
f1.setFont(font);


p1.add(b1);
p1.add(f1);
p1.add(joueur1);
p1.add(get1);
p1.add(rs);

p1.add(lab);

cont.add(p1);
setVisible(true);

}


public void actionPerformed(ActionEvent evt) {

if (evt.getSource() == b1 )
{
if(f1.getText().equals(""))get1.setText("case vide !");
else get1.setText("choix pris");
res1=f1.getText();
f1.setText("");


}


}


public static void main(String args[])
{
Serveur fn1=new Serveur();

ServerSocket SocketListner;
Socket connection;
BufferedReader incoming;

try {

SocketListner = new ServerSocket(port);

while (true) {
connection = SocketListner.accept(); // la le serveur est en attente
sendDate(connection,res1);


/*la fonction sendDate et en bas et Cette instruction «sendDate(connection,res1) » me permet d'envoyé la donné qui a choisi ce serveur au client qui é venu « connection a l socket de ce client » donc je pense que c'est ici qu'il faut maitre l thread et dedans ce thread ou ce run je mai la fonction sendDate qui é en bas nn ? mercii bqq d m'aidé sur ça*/

incoming = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String res2 = incoming.readLine();


if (res1.equals("1") && res2.equals("2"))
rs.setText(" Tu as perdu :(");
else if (res1.equals("2") && res2.equals("1"))
rs.setText(" Bravoooo tu as gagné :)");
else if (res1.equals("1") && res2.equals("3"))
rs.setText(" Bravoooo tu as gagné :)");
else if (res1.equals("3") && res2.equals("1"))
rs.setText(" Tu as perdu :(");
else if (res1.equals("2") && res2.equals("3"))
rs.setText(" Tu as perdu :(");
else if (res1.equals("3") && res2.equals("2"))
rs.setText(" Bravoooo tu as gagné :)");
else if ((res1.equals("1") && res2.equals("1"))
|| (res1.equals("3") && res2.equals("3"))
|| (res1.equals("2") && res2.equals("2")))
rs.setText(" Egaux");
else
rs.setText(" Erreur");



}

} catch (Exception e) {
System.out.println("Error" + e);
}

}// fin main

/*c'est cette fonction qui permet d'envoyé o client comme vs voyé l paramètre socket é ma donné */ private static void sendDate(Socket Client , String a) throws IOException {

PrintWriter outgoing;
outgoing=new PrintWriter(Client.getOutputStream());
outgoing.println(a);
System.out.println("le serveur a envoyé "+ a);
outgoing.flush();
//Client.close();

}
}
A voir également:

1 réponse

flo13142 Messages postés 71 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 21 février 2011 18
16 févr. 2011 à 09:44
Salut,

Le principe d'un thread en Java est assez simple.
Tu hérites de la classe Thread, tu implémentes la méthode run (), avec les actions que tu veux "threader"
Tu appels la méthode start pour le démarrer.

class MonThread extends Thread {

public void run (){
while (1){
 System.out.println ("Thread alive");
}
}

public static void main(String args[]) 
{
 Thread th = new MonThread ();
 th.start();
}


}


dans ton code, a mon avis, il faut que tu externalise ton traitement du main en créant une classe qui héritera de Thread et fera le traitement dans le run.
0