Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    NullPointerException

    Ciao a tutti
    e' il mio primo messaggio qui

    Sto scrivendo un programma che deve leggere una stringa da rete e rimepire una matrice corrispondente. Al momento ho:
    - il main
    ClientMap map = new ClientMap(conn);
    - la classe ClientMap
    codice:
    private Cell[][] draw = new Cell[10][6];
    codice:
    public ClientMap(ServerConnection conn) {
            String reading = "";
            reading = getSizeFromNet(conn);
            Integer rows_temp = Integer.valueOf(reading.substring(0,reading.indexOf(' ')));
            Integer columns_temp = Integer.valueOf(reading.substring(reading.indexOf(' ')+1,reading.length()));
            int rows = rows_temp.intValue();
            int columns = columns_temp.intValue();
            System.out.println("Playing on a map with " + rows + " rows and " + columns + " columns.");
    il problema e' che sembra che non istanzi nessun oggetto draw. Infatti dopo nel main richiamo:
    codice:
    map.getMapFromNet(conn);
    che e' un metodo della classe ClientMap che fa:
    codice:
    public void getMapFromNet(ServerConnection conn) {
            String reading = "";
            int rows = 10;
            int columns = 6;
            draw[0][0].setType('.');
            System.out.println(draw[0][0]);
            System.out.println("CIAO");
            printMap();
    Ora, il metodo scritto cosi e' abbastanza abominevole. Il problema pero lo raggiungo a run-time. Quando arrivo a
    codice:
    draw[0][0].setType('.');
    Che e' un metodo che semplicemente va a mettere un carattere in un campo di draw, mi dice:
    codice:
    Exception in thread "main" java.lang.NullPointerException
    Credo che quindi il problema sia nel fatto che lui non istanzia affatto l'array e che il tutto punta a nulla.
    Qualche idea?

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    non č esatto
    private Cell[][] draw = new Cell[10][6];
    istanzia l'array bidimensionale
    for (int i=0; i<draw.length; i++)
    for (int j=0; j<draw[i].length; j++)
    draw[i][j] = new Cell();
    istanzia gli elementi dell'array

  3. #3
    Hai ragione. Ho fatto come hai detto tu, che in effetti e' piu corretto, ma continua a darmi lo stesso problema... Ora il codice e' :
    Costruttore di Cell:
    codice:
    	private ArrayList idpackets;
    	private char type;
    	
    	public Cell() {
    		this.type = '.';
    		idpackets.clear();
    	}
    In ClientMap dove da errore:
    codice:
    for (int i=0; i<rows; i++)
    			for (int j=0; j<columns; j++) {
    				draw[i][j] = new Cell();
    				draw[i][j].setType('.');
    			}
    E l'errore lo da proprio dove gli vado a fare new Cell()..

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    Originariamente inviato da erbedo
    Hai ragione. Ho fatto come hai detto tu, che in effetti e' piu corretto, ma continua a darmi lo stesso problema...
    il problema č diverso, se non lo posti č difficile aiutarti

    comunque adesso si ferma perchč idpackets č null

  5. #5
    Scusami. Si in effetti adesso l'errore me lo da quando faccio
    codice:
    		getIds().clear();
    Ho anche cambiato il modo in cui creo l'ArrayList:
    codice:
    	private ArrayList idpackets = new ArrayList(10);
    Mi da sempre lo stesso errore, NullPointerException ma adesso nella riga dove faccio il clear. Dunque non istanzia l'array se ho ben capito giusto?

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    posta il metodo getIds() e il codice con il quale lo chiami

  7. #7
    codice:
    	public ArrayList getIds() {
    		return idpackets;
    	}
    Il codice con il quale lo chiamo e' all'inteno del costruttore di Cell, lo setsso che ho postato nel messaggio prima, ovvero:
    codice:
    getIds().clear();

  8. #8
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    metti idpackets.clear(); al posto del metodo
    se non funziona posta tutta la classe Cell

  9. #9
    Niente da fare, sempre NullPointerException nella riga in cui cerco di istanziare l'array..
    codice:
    package it.unibo.cs.csrobots;
    import java.util.ArrayList;
    
    public class Cell {
    	private static final char grass = '.';
    	private static final char wall = '#';
    	private static final char camp = '@';
    	private static final char water = '~';
    	// Aggiunto questa variabile
    	// Letto da: Bedo
    	private static final char invalid = '-';
    	private static final int norobot = -1;
    	private int id_robot = norobot;
    	private ArrayList idpackets = new ArrayList();
    	private char type;
    	
    	public Cell() {
    		this.type = '.';
    		idpackets = new ArrayList(10);
    		idpackets.clear();
    	}
    
    	// Aggiunto questo metodo
    	// Letto da: Bedo
    	public ArrayList getIds() {
    		return idpackets;
    	}
    	
    	public void setType (char t) {
    		if (t == grass) this.type = grass;
    		else if (t == wall) this.type = wall;
    		else if (t == camp) this.type = camp;
    		else if (t == water) this.type = water;
    	}
    
    	public char getType (){
    		if (type == grass) return grass;
    		else if (type == wall) return wall;
    		else if (type == camp) return camp;
    		else if (type == water) return water;
    		// Aggiunto a causa del return di default
    		else return invalid;
    	}
    
    	public boolean setRobot (int robid) {
    		if ((robid >= 0) && (getRobot() == norobot)) { 
    			id_robot = robid;
    			return true; 
    			}
    		else return false;
    	}
    		
    	public int getRobot () {
    		return id_robot;
    	} 
    }
    Qua c'e tutta la classe Cell. Grazie per l'aiuto!

  10. #10
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    a parte che chiamare clear dopo aver istanziato l'array list č inutile
    ma sei sicuro che l'errore riguarda quella riga?
    posta lo stack trace dell'eccezione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.