Bonjour à tous,
Je suis entrain de développer une application réseau et j'ai besoin pour ce faire d'utiliser un TimerTask pour lancer des tâches toutes les x secondes. Seulement pour communiquer avec le serveur dans ma classe ClientUpdate qui étend TimerTask, je passe ma classe Client.java qui contient le nécessaire pour communiquer avec le serveur.
Mais je n'arrive pas à modifier les attributs public de ma classe Client passé en paramètre de mon TimerTask, ou alors je n'arrive pas à lire sur le réseau les objets que je reçois dans la classe ClientUpdate.
Savez-vous pourquoi ?
Je poste mes classes si jamais vous avez une idée...
ClientUpdate.java
Client.java
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 package client; import game.player.Player; import game.player.PositionPlayer; import java.io.IOException; import java.util.ArrayList; import java.util.TimerTask; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import network.Request; public class ClientUpdate extends TimerTask { Request r; PositionPlayer pp; Client c; Lock l; public ClientUpdate(Client client) { this.r = new Request(); this.pp = new PositionPlayer(); this.c = client; this.l = new ReentrantLock(); } public void run() { //l.lock(); // Mise a jour des joueurs de la region actuelle r.idapplication = 2; r.idtypereq = 1; c.nm.sendRequest(r); try { // Envoie de la position du joueur c.nm.oos.writeObject(c.joueur.pp); // Reception du serveur this.pp = (PositionPlayer) c.nm.recvObject(); } catch (IOException e) { e.printStackTrace(); } System.out.println("--------------------------------------------"); System.out.println("NBPLAYER dans la region : "+this.pp.players.size()); for(Player p: this.pp.players) { System.out.println("** "+p.name); } System.out.println("--------------------------------------------"); //l.unlock(); } }
D'avance merci de votre aide, en espérant que vous aurez une idée.
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
79
80
81
82
83
84 package client; import java.io.IOException; import java.util.Timer; import javax.swing.JOptionPane; import org.newdawn.slick.AppGameContainer; import org.newdawn.slick.SlickException; import network.NetworkManager; import network.Request; import game.GameManager; import game.player.Player; import game.player.PositionPlayer; import game.world.GameTime; /** * Gestion d'une session cliente * @author akrogames * */ public class Client implements Runnable { public GameManager gm; public NetworkManager nm; public Player joueur; private Thread t; public Client() { this.gm = new GameManager(); this.nm = new NetworkManager(); this.joueur = new Player(null, null); t = new Thread(this); } @Override public void run() { // On lance les procedures de MAJ. while(true) { //TODO ... } } /** * Permet de lancer le jeu du client */ public void launchGame() { AppGameContainer app; try { // Creation du Thread de gestion du client this.t.start(); // On met à jour le player this.joueur = (Player) this.nm.recvObject(); System.out.println("Bienvenue "+this.joueur.name+", NUM: "+this.joueur.numplayer); System.out.println(this.joueur.pp.toString()); app = new AppGameContainer(new Clientgame()); app.setDisplayMode(800, 600, false); //app.start(); Timer time = new Timer(); ClientUpdate cu = new ClientUpdate(this); time.schedule(cu, 0, 500); } catch (SlickException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * On ferme les connexions */ public void close() { this.nm.close(); } }
Bonne soirée.
Partager