每當我嘗試使用MainApp類中的userNames列表時,我都會收到IndexOutOfBoundsException。但是,我確定這些名稱是從ServerController類添加到列表中的,因此我不明白爲什麼在另一個類中調用該列表時爲空。爲什麼ArrayList保持爲空而將另一個類中的對象添加到列表中?
我想這可能是一個實例檢查類似問題的SO問題,我一直試圖解決很長一段時間,但我根本無法做到這一點。我真的很感激任何建議,TIA。
這是我的用戶類,其唯一目的是存儲用戶數據,即名稱和ID。
public class User {
public User() {
}
public ArrayList<String> userNames = new ArrayList<>();
public ArrayList<String> getUserNames() {
return this.userNames;
}
}
這是我的服務器類:將名稱添加到userNames列表工作正常。
public class ServerController {
private final Server server;
private final User user;
private final GameConfig gameConfig;
public ServerController(GameConfig gameConfig) {
this.gameConfig = gameConfig;
this.server = new Server();
this.user = new User();
}
public User getUser() {
return user;
}
private class ServerListener extends Listener {
//this is where I add the names to the userNames list
@Override
public void received(Connection connection, Object obj) {
server.sendToAllExceptTCP(connection.getID(), obj);
if (obj instanceof String) {
final String jp = (String) obj;
user.userNames.add(jp);
}
}
這是我的MainApp:我嘗試訪問存儲在userNames中的用戶的名稱。只要收到的連接正常工作,ServerController就會將名稱添加到列表中,但我在createPlayer方法中遇到了異常。
public class MainApp {
public User user = new User();
public Game createPlayer(){
if (("Mitspieler".equals(client1)) && ("Mitspieler".equals(client2)) && ("Mitspieler".equals(bot1))) {
for (int i = 0; i < clients.length; i++) {
//this is the source of the exception
players[i + 1] = createHumanPlayer(user.getUserNames().get(i), i, restColors[i]);
}
}
//....
}
堆棧跟蹤:
Exception in thread "JavaFX Application Thread"
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at client.MainApp.createPlayer(MainApp.java:265)
看起來你有2個不同的'在'ServerController' User'情況下,你的'MainApp'類 – esin88
您的列表'userNames'必須用一些數據調用'createPlayer' – Abubakkar
哪裏是''在之前ServerController'人口MainApp'? – niceman