Wartości do tablicy nie przekazują się.

0

Witam. Mam metodę która zapisuje mi w tablicy pewne liczby. Tablica jest polem i jest publiczna. Próbuje się do tej tablicy odwołać w innej klasie ale cały czas mi wywala NullPointerException ponieważ elementy w tablicy nie przypisują się. Męczę się z tym już parę godzin i nic nie mogę wymyślić, a rozwiązanie pewnie jest proste.

Metoda:

if(serverLine.contains(playerName)){
            getFromServer(playerName);
            if(serverLine.contains("playerCards")){
                String tmp = serverLine.replaceAll("\\D+","");
                int card = Integer.parseInt(tmp);
                getFromServer(serverLine + " = " + card);
                serverLine = readData();
                if(serverLine.contains("index")){
                    int index = Integer.parseInt(serverLine.replace("index",""));
                    playerCards[index] = card;
                    System.out.println(playerCards[index]);
                }


            }
        }

A tu odwołanie do tablicy playerCards:

mainPanel.setPlayerCards(client.playerCards);

public void setPlayerCards(int[] cards){
    for (int i = 0; i < playerImgCards.length; i++){
        playerImgCards[i].setIcon(new ImageIcon(cardReader.load(cards[i])));
    }

Błąd polega na tym, że gdy przez cardReader próbuję wczytać kartę wywala błąd bo są same zera a karty zaczynają się od 201...
mainPanel i clienta tworzę sobie w klasie ClientGui. Sprawdziłem i karty które chcę przypisać do tablicy się zgadzają więc nie wiem dlaczego ich później w niej nie ma.

0

Ogólnie twoja zmienna intowa index jest pobierana, a następnie interpretujesz ją jako indeks tablicy - bardzo niebezpieczne, bo żadnej praktycznie walidacji nie robisz i o null pointer czy inny exception nietrudno. W ogóle zamiast tablicy używaj ArrayList / LinkedList

0

Na początku korzystałem z ArrayListy i nie pobierałem indexu tylko korzystałem z metody add, ale był ten sam problem, że tych danych później nie było :(

0

Rozbuduj trochę d*pa debugging

                if(serverLine.contains("index")){
                    int index = Integer.parseInt(serverLine.replace("index",""));
                    playerCards[index] = card;
                    System.out.println("index = "+index+"card = "+playerCards[index]);
                }

1 użytkowników online, w tym zalogowanych: 0, gości: 1