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

    [java] passaggio di parametri a una classe Runnable

    Il client lancia una classe di bootstrap RMIClientBootstrap.class la quale provvede a scaricare dinamicamente la classe Client.class e a lanciarla:

    codice:
    ...
    Runnable client = bootstrap.getClient();
    client.run();
    A questo punto il controllo passa alla classe Client.class

    codice:
    public class Client implements Runnable, Serializable {
    public void run() {
     // codice del client 
    ... }
    In che modo posso passare parametri dalla classe RMIClientBootstrap alla classe Client, visto che il metodo run() della classe Runnable non vuole argomenti?
    grazie

  2. #2
    Usa dei metodi get/set nella classe client e glieli setti prima di chiamare il metodo run().
    codice:
    public class Client implements Runnable, Serializable {
    public void run() {
     // codice del client 
    ... 
    }
    public void setA(Object a){this.a=a;}
    ....
    
    }
    
    Runnable client = bootstrap.getClient();
    ((Client)client).setA(...);
    client.run();
    oppure se puoi modificare la classe bootstrap

    codice:
    public class Client implements Runnable, Serializable {
    public Client(parametri){
    ...
    }
    public void run() {
     // codice del client 
    ... }
    
    Runnable client = bootstrap.getClient(parametri);
    client.run();
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Dentro Client metti un metodo init(PARAMETRI CHE VUOI PASSARE)
    poi lo chiami con i parametri prima di fare client.run()-
    Ad esempio
    codice:
    Runnable client = bootstrap.getClient();
    client.init("pippo");
    client.run();
    codice:
    public class Client implements Runnable, Serializable {
       private String pippo;
    
       public void init(String pippo) {
          this.pippo=pippo;
       }
    
       public void run() {
          // codice del client 
       }

  4. #4
    e' un'ottima idea.
    Pero' non saprei come fare il cast su RMIClientBootstrap
    ((Client)client).setFoo("Bar");

    perche' a tempo di compilazione RMIClientBootstrap non conosce la classe Client (viene scaricata dinamicamente)

    percio' il compilatore giustamente si lamenta che
    codice:
    "cannot find symbol"
    symbol: class Client
    ...
    ((Client)client).setFoo("Bar");
       ^


    ah, e senza cast non posso perche' con
    codice:
    Runnable client = bootstrap.getClient();
    client.setFoo("Bar");
    perche' cosi' RMIClientBootstrap vede client come Runnable e non come Client, e in Runnable il metodo setFoo() non c'e'


  5. #5
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    http://java.sun.com/javase/6/docs/ap...a.lang.Object)
    chiedo scusa ma ora non ho tempo di scrivere un esempio... che sarebbe peraltro abbastanza banale. Se la tua classe Client viene scaricata dinamicamente, ce l'avrai da qualche parte per invocare il metodo cast();

  6. #6
    Originariamente inviato da nether
    http://java.sun.com/javase/6/docs/ap...a.lang.Object)
    chiedo scusa ma ora non ho tempo di scrivere un esempio... che sarebbe peraltro abbastanza banale. Se la tua classe Client viene scaricata dinamicamente, ce l'avrai da qualche parte per invocare il metodo cast();
    Non credo sia cosi' banale.
    Dinamicamente = a tempo di esecuzione.
    percio' a tempo di compilazione, cioe' prima di averla eseguita, non ho nessuna informazione sulla classe Client (salvo che so che dovra' implementare Runnable).
    Non so se avra' un metodo getFoo() o altro..

  7. #7
    Puoi implementare un'interfaccia con un metodo setParameter(Vector<Object> params) e fare in modo che la classe Client implementi anche quell'interfaccia oltre a Runnable. In questo modo sei sicuro che il metodo setParameter ci sarà.
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  8. #8
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    puoi anche creare un'interfaccia ParameterizedRunnable che estende Runnable, con dentro il metodo per settare i parametri, e far implementare solo quella. Cosi' eviti di castare a destra e a sinistra a seconda del metodo che vuoi utilizzare.

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.