Ok, donc j'ai un test client/serveur en cours, et je passe l'entier playerID à un fil où il donne la valeur int à un simple objet de joueur, que incréments playerId par 1.Nombre entier n'augmentera pas?
public static void main(String[] args) throws IOException {
Vector<Player> player = new Vector<Player>();
SlickServer ss = new SlickServer();
ss.setVisible(true);
ServerSocket serverSocket = new ServerSocket(4444);
boolean listening = true;
Integer playerID = new Integer(0);
while(listening){
ss.textArea.append("Waiting to connect with player: " + playerID.intValue() + "\n");
new ClientThread(serverSocket.accept(), player, playerID, ss.textArea).start();
ss.textArea.append("Waiting to connect with player: " + playerID.intValue() + "\n");
}
serverSocket.close();
System.exit(0);
}
et ici où il incrémente dans le fil:
public ClientThread(Socket acceptedSocket, Vector<Player> players, Integer playerID, JTextArea textArea){
super("ClientThread");
this.acceptedSocket = acceptedSocket;
this.players = players;
players.add(new Player(50,50, playerID.intValue()));
if(players != null)
System.out.println("Not Null: " + players.size());
boolean b = false;
for(int i = 0; i < players.size(); i++){
if(!b){
if(players.get(i).id == playerID){
me = players.get(i);
b = true;
}
}
}
playerID = new Integer(playerID.intValue() + 1);
this.textArea = textArea;
}
lecture http://stackoverflow.com/questions/40480/is-java-pass-by-reference peut vous donner une idée de la raison pour laquelle cela ne fais ce que tu attends. –
Si vous voulez en savoir un peu plus sur le partage de données entre les threads, je recommanderais Java Concurrency in Practice. En bref, si vous ne concevez pas explicitement des variables pour le partage, vous ne savez jamais ce que vous obtenez. – extraneon