Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347

    [Java]Problema passaggio oggetto in RMI

    Ciao, ho un problema in un programmino server-client su cui sto lavorando, per semplificare le cose ho usato l'RMI, ma ho incontrato un ostacolo: la parte server, all'avvio, legge dei dati da un documento, li carica in una lista e li passa all'oggetto che funge da oggetto remoto per il client; il problema è che quando l'oggetto chiama il metodo per avere questa lista, riceve un oggetto nullo. Ho controllato le varie classi con la funzione debug di eclipse ma nella parte server non c'è alcun problema. Quindi ho pensato che ci sia qualche altro problema nella connessione, ma premetto che altri metodi funzionano correttamente.
    Siccome sono nuovo all'RMI(praticamente l'ho studiato per questo progetto), c'è qualcosa che dovrei sapere? Magari qualche comportamento particolare degli oggetti remoti?
    So che perchè mi possiate aiutare dovrei postare l'intero codice ma è abbastanza lungo(dato che dovrei postare più classi) ma magari sto già sbagliando qualcosa in quello che vi ho spiegato sopra. Nel caso posto le classi. Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Posta almeno il pezzo di codice che fa la chiamata remota e il codice del metodo remoto... Senza codice non ti si può dire che problema c'è
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    Eccoli, la parte server non fa niente di complicato, istanzia l'oggetto remoto passandogli la lista, e con questo metodo la richiedo dal client:
    codice:
    public synchronized ArrayList<Giocatore> getListaGiocatori() throws RemoteException {
    	return giocatori;
    }
    questo è invece quello che succede nella parte client (ho inserito solo i metodi interessati e qualche istruzione è ancora di prova):
    codice:
     
    private RemoteInterface server = null;
    
    public Client(String address) {
    	t = new Thread(this);
    	serverAddress = (address != null && address.matches(validAddress)) ? address : defaultAddress;
    	try {
    		server = (RemoteInterface) Naming.lookup("rmi://" + serverAddress + "/RemoteInterface");
    	} catch(MalformedURLException | RemoteException | NotBoundException e) {
    		e.printStackTrace();
    	}
    }
    
    public void run() {
    	Rosa model = new Rosa("Giovanni");
    	ClientWindow view = new ClientWindow(giocatori(), 100);
    	// associo modello alla vista
    	model.addObserver(view);
    	// creo il controller e associo il modello e la vista
    	ClientController myController = new ClientController();
    	myController.addModel(model);
    	myController.addView(view);
    	// associo il controller alla vista
    	view.addController(myController);
    }
    
    private ArrayList<Giocatore> giocatori() {
    	ArrayList<Giocatore> giocatori = null;
    	try {
    		giocatori = getListaGiocatori();
    	} catch(RemoteException e) {}
    	return giocatori;
    }
    
    public ArrayList<Giocatore> getListaGiocatori() throws RemoteException {
    	return server.getListaGiocatori();
    }
    praticamente mi faccio inviare la lista dei giocatori e poi la passo all'interfaccia che deve semplicemente visualizzarla... ma arriva un puntatore nullo...

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    RISOLTO! Sono un novellino proprio -.- gli oggetti che intendevo inviare tramite quella lista non erano serializzabili... prima applicazione server-client, me lo immaginavo che mi sarei trovato di fronte a qualcosa del genere!

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    Ne approfitto però per fare un'altra domanda: io dal client vorrei verificare ogni n secondi che sia attiva la connessione RMI ma per ora l'unica cosa che mi viene in mente è un controllo del puntatore dell'oggetto remoto, vedendo se è null. So già che è una stupidaggine, quindi volevo chiedere se c'è un metodo apposito o come posso controllare ciò nel caso lo dovessi fare "manualmente". Ps: scusate il triplo-post

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.