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);
}
}
私のメインアプリケーションは次のとおりです。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)
'ServerController'と' MainApp'クラスに2つの異なる 'User'インスタンスがあるように見えます – esin88
' createPlayer'を呼び出す前にあなたのリスト 'userNames'にいくつかのデータを入れる必要があります – Abubakkar
ここで、' ServerController'は ' MainApp'? – niceman