PDA

View Full Version : [java applet] Problema nella comunicazione tra applet su una stessa pagina.


Player1
24-12-2011, 18:39
Ciao a tutti,
sto cercando di far comunicare due applet che si trovano sulla stessa pagina.
Ho seguito un esempio, adattandolo al mio caso specifico ma qualcosa non funziona, ecco qui la parte del codice che da problemi:

logger.debug("Mouse pressed");
AppletContext ac = getAppletContext();
RMIApplet dataApplet = (RMIApplet) ac.getApplet("getDataApplet");
if (dataApplet==null){
logger.debug("applet NOT found :( ");
}
else{
logger.debug("applet FOUND :) ");
}

Questo semplice codice mi da la seguente eccezione alla terza riga
Exception in thread "AWT-EventQueue-3" java.lang.ClassCastException: rankVisRMIApplet.RMIApplet cannot be cast to rankVisRMIApplet.RMIApplet
at rankVisRMIApplet.rankVisApplet.loadNewData(rankVisApplet.java:99)

La cosa mi sembra molto strana perchè come lo stesso messaggio di eccezione dice RMIApplet non può essere "castata" ad RMIApplet ma si tratta di un oggetto dello stesso tipo!

Se invece provo a recuperare un oggetto di tipo Applet generico modificando la riga 3 in questo modo
logger.debug("Mouse pressed");
AppletContext ac = getAppletContext();
Applet dataApplet = ac.getApplet("getDataApplet");
if (dataApplet==null){
logger.debug("applet NOT found :( ");
}
else{
logger.debug("applet FOUND :) ");
}

Ho come risultato la scrittura della stringa "applet FOUND :)" segno che l'applet viene recuperata correttamente, solo che in questo caso non posso farci nulla perchè si tratta di un'applet generica che non ha i metodi di RMIApplet.

Dov'è che sbaglio?

Player1
28-12-2011, 12:07
Faccio un piccolo up visto che è passato qualche giorno e non sono ancora riuscito a risolvere il problema, nessuno ha mai fatto comunicare applet che si trovano sulla stessa pagina?
Please HEEELP!!

Player1
01-01-2012, 18:36
Non riesco proprio a risolvere.
Inserisco maggiori dettagli e provo a ragionarci un po' qui nella speranza che qualcuno riesca a darmi una mano.
Infondo si tratta del meccanismo di cast di Java non ho preso chissà quale strana e marginale funzione, sto seguendo rigorosamente (credo) la logica Java e non si tratta di 10000 righe di codice sono solo 2 o 3.
Perché non funziona?

Allora, ricapitoliamo, ho un oggetto di tipo AppletContext che ottengo così:

AppletContext ac = getAppletContext();

L'oggetto ac ha tra i suoi metodi quello che mi interessa che ha la seguente segnatura:

Applet getApplet(String name)

Bene,
quindi se io scrivo questo:

AppletContext ac = getAppletContext();
Applet myApplet = ac.getApplet("appletName");


Ottengo l'oggetto di tipo Applet chiamato myApplet.
Ok, ora provo a forzare il cast, dovrebbe funzionare ugualmente, giusto?!?
A me non da errori:

AppletContext ac = getAppletContext();
Applet myApplet = (Applet) ac.getApplet("appletName");


Fantastico quindi ho un oggetto chiamato myApplet che è inequivocabilmente di tipo Applet.

Ora, io ho creato un nuovo tipo di oggetto RMIApplet che estende Applet.

public class RMIApplet extends Applet {

Vorrei convertire myApplet(che è di tipo Applet) in myRmiApplet (di tipo RMIApplet) utilizzando un cast.
Visto che RMIApplet estende Applet, non dovrebbe essere SEMPRE possibile convertire un oggetto di un determinato tipo in uno di un tipo che lo estende?!

Riporto qui di seguito il codice completo:
AppletContext ac = getAppletContext();
Applet myApplet = (Applet) ac.getApplet("getDataApplet");
RMIApplet myRmiApplet = (RMIApplet) myApplet;

Ora, alla terza riga mi da la seguente eccezione:
Exception in thread "AWT-EventQueue-3" java.lang.ClassCastException: rankVisRMIApplet.RMIApplet cannot be cast to rankVisRMIApplet.RMIApplet

Prima di tutto, come si può vedere dalla seconda riga di codice myApplet è assolutamente, inconfutabilmente, indissolubilmente di tipo Applet, giusto?!? Benissimo, anche se per un qualsiasi assurdo problema di Java la terza riga dovesse darmi un ClassCastException, per quale motivo mi dice che rankVisRMIApplet.RMIApplet[/COLOR] cannot be cast to ... ?
Dovrebbe in ogni caso essere
java.lang.Applet[/COLOR] cannot be cast to...
Visto che l'oggetto che sto cercando di "castare", myApplet, è comunque di tipo Applet.

Poi assumendo per assurdo che tra la linea 2 e la linea 3 del mio codice myApplet si sia autonomamente evoluto in un oggetto di tipo rankVisRMIApplet.RMIApplet (quello che lancia il class cast exception), come è possibile che venga lanciata l'eccezione stessa? Si tratterebbe in quel caso di oggetti dello stesso tipo. Come se io avessi problemi a castare un oggetto di tipo String in un oggetto di tipo String o uno di tipo Integer in uno di tipo Integer, non è assurdo?!?

Quindi, l'oggetto myApplet chiamato alla seconda riga, secondo voi di che tipo è?!?