Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813

    nullpointerexception per far diventare byte array in oggetti

    ciao a tutti...
    ho creato questa classe che mi converte array di byte in oggetti e viceversa, per la trasmissione di oggetti tramite pacchetti datagram.

    codice:
    public class DatagramUtility {
    
        public static byte[] getBytes(Object obj) throws IOException{
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream outStream = new ObjectOutputStream(baos);
            outStream.writeObject(obj);
            byte[] buf = baos.toByteArray();
            outStream.close();
            baos.close();
            return buf;
        }
    
        public static Object getObject(byte[] buf) throws IOException, ClassNotFoundException{
            ByteArrayInputStream  bais = new ByteArrayInputStream(buf);
            ObjectInputStream inStream = new ObjectInputStream(bais);
            Object obj = inStream.readObject();
            return obj;
        }
    }
    quando faccio questa cosa:

    LocalPlayer p = new LocalPlayer();
    byte[] b = DatagramUtility.getBytes(p);
    DatagramUtility.getObject(b);

    ovvero converto un oggetto in byte e subito dopo lo faccio diventare un oggetto di nuovo, mi ritorna un nullpointer exception proprio nella 3^ riga...
    Se faccio la stessa operazione con un oggetto di Java, come String, tutto funziona correttametne...
    vi posto la classe LocalPlayer e tutta la sua gerarchia
    codice:
    public class LocalPlayer extends ClientPlayer implements KeyListener
    {
        private static final long serialVersionUID = 2266117503032923258L;
        private ServerListener sendToServer;
    
        public LocalPlayer()
        {
    	    super(new Point(0,0),(byte)0,0);
        }
            
        public LocalPlayer(Point point,int direction)
        {
            super(point,(byte)0,direction);
        }
        
        public void setServerListener(ServerListener serverListener)
        {
            sendToServer = serverListener;
        }
        
        public ServerListener getServerListener()
        {
            return sendToServer;
        }
    
        public void keyTyped(KeyEvent ke)
        {}
    
        public void keyPressed(KeyEvent ke)
        {}
    
        public void keyReleased(KeyEvent ke)
        {
            boolean arrowKeys,directionChange;
    
            arrowKeys = (ke.getKeyCode()==KeyEvent.VK_UP)||(ke.getKeyCode()==KeyEvent.VK_DOWN)
                 ||(ke.getKeyCode()==KeyEvent.VK_LEFT)||(ke.getKeyCode()==KeyEvent.VK_RIGHT);
            directionChange=getDirection() != ke.getKeyCode();
            
            if (arrowKeys && directionChange)
            {
                setDirection(ke.getKeyCode());
                computeDirection();
                try
                {
    
                    sendToServer.sendToServer((Player) this);
                }
                catch (IOException ioe)
                {
                    System.out.println(ioe.getMessage());
                }
            }
                
            
        }
    }
    
    
    public class ClientPlayer extends Player implements ActionListener
    {
        private static final long serialVersionUID = 644461926280548522L;
        public static final byte OFFSET = 2;
        
        private int left;
        private int top;
        private Timer moveTick;
        private Avatar clientAvatar;
        
        public ClientPlayer(Point point, byte id,int direction)
        {
            super(point,id,direction);
            computeDirection();
            moveTick = new Timer(Player.TIME,this);
            clientAvatar = new Avatar(getLocation());        
        }
    ....
    }
    
    public abstract class Player implements Serializable {
        private static final long serialVersionUID = -1266517203068921238L;
    	
        public static final int DELTA = 5;
        public static final int TIME = 50;
        public static final int BALL_SIZE = 24;
        public static final Dimension SCREEN_SIZE = new Dimension(450,500);
        private Point location;
        private int direction;
        private byte id;
    ...
    }
    la classe padre, player e di tipo serializable e tutte hanno un uid assegnato...
    dove sbaglio?
    vi ringrazio anticipatamente
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    ... .... ...
    Sinceramente non conosco la teoria che ci sta dietro, ma ricordo un problema simile ( forse è meglio che rispolvero un pò di manuali ), prova a rimuovere il baos.close();.
    Mi sembra che devi mantenerlo aperto....o qualcosa di simile, ma temo di dire la più grande caxxata del mondo quindi attendo conferma da LeleFT, Alka, andbin, Pastore12....insomma...chiunque ne sappia più di me!!
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

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 © 2026 vBulletin Solutions, Inc. All rights reserved.