好了,所以我有一個客戶端/服務器測試回事,我傳遞的整數playerID一個線程在那裏它給人的int值,以一個簡單的播放器對象,比1整數不會遞增?
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);
}
playerID增量這裏就是它的線程增加它:
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;
}
閱讀http://stackoverflow.com/questions/40480/is-java-pass-by-reference可能會給你一些見解,爲什麼這不做你的期望。 – 2010-09-28 17:14:41
如果您想了解更多關於線程之間數據共享的信息,我會推薦Java Concurrency in Practice。總之,如果你沒有明確地設計變量來共享,你永遠不知道你得到了什麼。 – extraneon 2010-09-28 17:51:26