|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 2992
|
[JAVA]Scaricare classi dalla JVM
Vorrei poter caricare e scaricare classi racchiuse in file jar all'interno di una JVM.Fino ad ora ho utilizzato un'oggetto URLClassLoader ma purtroppo in fase di scaricamento, non riesco ad eliminare ogni riferimento agli oggetti creati da queste classi.Grazie già da ora per i vostri suggerimenti.
|
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Allo scaricamento pensa la JVM e non c'è modo di darle suggerimenti in merito. Forse ci sono strade alternative. Cosa devi fare?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]() devi mantenere gli oggetti caricati in una cache? ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 2992
|
Allora ho un sistema a plugin, ogni plugin è composto da un file jar, quando carico il file jar all'interno di un URLClassLoader subito dopo carico anche una classe Handler contenuto nel suddetto jar,questa a sua volta si crea i suoi bei oggetti.Con una classe Handler che non crea oggetti il tutto funziona impostando l'oggetto URLClassLoader a null e chiamando subito dopo il garbage collection eppoi instanziare di nuovo per caricare i jar rimanenti, mentre con un Handler che crea oggetti questo non funziona.
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Il comportamento del garbage collector è euristico. Se un programma funziona perchè System.gc() fa qualcosa è un bel problema
![]() Se vuoi caricare durante l'esecuzione una definizione di classe e renderla disponibile al resto del sistema, tutto ciò che occorre fare è creare e usare un nuovo ClassLoader quando carichi o ricarichi i plug-in. In questo modo le classi caricate risulteranno "nuove" pur avendo lo stesso nome pienamente qualificato. Il resto è una questione di struttura del programma e immagino che tu già l'abbia fatta. Esisterà, ad esempio, un GestoreServiziPluggable al quale il sistema si rivolge quando deve essere eseguito un certo servizio sostituibile. Se il GestoreServiziPluggable non si limita ad eseguire compiti ma distribuisce questi servizi, tramite riferimenti di tipo interfaccia secondo le linee guida del caricamento dinamico di servizi sostituibili, allora esisterà anche un meccanismo che notifica agli utente del gestore di servizi l'avvenuta sostituzione di una definizione con un'altra.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 2992
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 2992
|
Quote:
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 2992
|
Ho trovato il problema e ho risolto, vi ringrazio per le vostre risposte.
Sapete un modo per capire se ci sono dati nella Clipboard di sistema? |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Prova con FlavorListener. E' un ascoltatore di eventi, lo attacchi alla Clipboard e dovresti ricevere una notifica attraverso il suo metodo flavorsChanged quando è disponibile un nuovo dato.
A dir la verità mi sembrava che ci fosse un altro modo ma è un po' che non metto più le mani sulla Clipoard, forse è quello.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 2992
|
Quote:
|
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 2992
|
Risolto anche questo con
Toolkit.getDefaultToolkit().getSystemClipboard() .getContents(this).getTransferDataFlavors().length > 0 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:54.