Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [java] problema con un vettore statico

    ciao a tutti sono nuovo del forum e sto preparando un progetto per l'università in java.
    il mio problema riguarda un vettore statico a cui non riesco ad accedere da altre classi.
    vi posto il codice e spero che mi sappiate aiutare...

    public class MMOGImpl extends UnicastRemoteObject implements GestisciPeers
    {
    private static final long serialVersionUID = 1L;
    public static Vector<Peer> elenco = new Vector<Peer>();

    public MMOGImpl() throws RemoteException
    {
    super();
    }
    public synchronized Position addPeer(Peer toAdd)
    {
    //qui dopo vari controlli addo il nuovo peer
    //semplifico per ragioni di spazio
    elenco.addElement(toAdd);
    }
    }
    ora da un'altra classe riesco ad accedere al vettore ma me lo trova sempre vuoto...

    public class CommThread extends Thread
    {
    private String name;
    private Position pos = null;

    public CommThread(String nomePeer, Position startingPos)
    {
    name = nomePeer;
    pos = startingPos;
    }

    public void run()
    {
    //questo mi ritorna sempre zero
    int size = MMOGImpl.elenco.size();
    //da qui in poi ottengo solo NoSuchElementException
    for(MMOGImpl.elenco.firstElement(); i < size; i++)
    {
    inUse = MMOGImpl.elenco.get(i);
    if(inUse.getNome().equals(name))
    {
    questoPeer = inUse;
    questaPos = MMOGImpl.posizioni.get(i);
    break;
    }
    }
    }
    }

    in pratica non capisco come faccio ad aggiornare il vettore in modo che le add siano visibili anche alle altre classi, dato che il vettore rimane sempre vuoto all'esterno, ma all'interno di MMOGImpl esso si popola eccome... any help please???
    vi ringrazio in anticipo e spero in una risposta esaustiva
    ciaooo

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Moderazione

    Ho spostato la discussione nel forum dedicato a Java.
    In futuro, poni qui le tue domande relative a questo linguaggio.

    Leggi anche il Regolamento del forum.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Dal codice che hai postato credo che tu stia utilizzando RMI.
    Se è così, allora è molto probabile che la chiamata del Thread faccia riferimento ad un "ambiente" diverso, ovvero che l'oggetto Thread risieda su una JVM diversa, che quindi non sa nulla di ciò che è avvenuto sul vettore ad opera dell'altra JVM.

    Io non sono pratico di RMI, ma ho il forte sospetto che si tratti di questo.

    Ad ogni modo, non è bello avere oggetti pubblici e addirittura statici. La programmazione ObjectOriented prevederebbe di avere oggetti privati e di generare un punto di accesso ad essi tramite un metodo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    ok in pratica ho creato un'altra classe di tipo vettore a cui possono accedere tutti ma cmq continuo ad avere problemi con la NoSuchElementException...

    codice:
    public class peerVector extends Vector
    {
    	private static Vector<Peer> elenco = new Vector<Peer>();	
    	public peerVector()
    	{
    		super();
    	}
    	
    	public static Vector<Peer> getPeersVector()
    	{
    		if(elenco.isEmpty())
    			return null;
    		else
    			return elenco;
    	}
    	
    	public synchronized static void add(Peer toAdd)
    	{
    		if(elenco.isEmpty())
    			elenco.addElement(toAdd);
    		else
    			elenco.addElement(toAdd);
    		System.out.println("add");
    	}
    	
    	public static int sizeOf()
    	{
    		System.out.println("size");
    		return elenco.size();		
    	}
    	
    	public static Peer first()
    	{
    		if(elenco.isEmpty())
    			return null;
    		else
    			return elenco.firstElement();
    	}
    	
    	public static Peer prendiPeer(int pos)
    	{
    		return elenco.get(pos);
    	}
    	
    	public synchronized static void remove(Peer toRem)
    	{
    		elenco.remove(toRem);
    	}
    	
    	public static Peer locateElement(int index)
    	{
    		if(elenco.size() > index)
    			return elenco.get(index);
    		else
    			return null;
    	}
    }
    cioè non mi aggiorna [private static Vector<Peer> elenco = new Vector<Peer>();] che rimane sempre vuoto... o meglio il registry riesce ad accedervi ma i clients no...
    suggestions?
    grazie ancora di tutto!!!

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.