new Integer
создает новый экземпляр Integer
внутри метода потока клиента, который не доступен вызывающей стороне.
Однако вам необходимо учитывать синхронизацию между основным и клиентским потоком. Это может быть достигнуто с помощью операторов synchronized
для нетривиальных объектов или классов, таких как java.util.concurrent.atomic.AtomicInteger
для целых чисел, следующим образом:
AtomicInteger playerID = new AtomicInteger(0);
while (listening) {
ss.textArea.append("Waiting to connect with player: " + playerID.get() + "\n");
new ClientThread(serverSocket.accept(), player, playerID, ss.textArea).start();
ss.textArea.append("Waiting to connect with player: " + playerID.get() + "\n");
}
class ClientThread {
public ClientThread(Socket acceptedSocket, Vector<Player> players, AtomicInteger playerID, JTextArea textArea) {
// etc.
playerID.incrementAndGet();
// etc.
}
}
Вам нужно подумать о том, как обмениваться данными между одновременно выполняющимися потоками. Это относится также к аргументам Vector<Player>
и JTextArea
. Вы должны обернуть доступ к объектам players
и textArea
, используя соответствующие операторы synchronize
.