Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51

    [JAVA] ClassLoader e Serializzazione

    Ciao a tuttti

    Ho un problema con la deserializzazione di classi caricate a runtime.

    Ho un programma che carica una classe contenuta in un file jar a runtime con un URLClassLoader utilizzando il medoto loadClass(String name) da cui ottengo un oggetto Class<?> che utilizzo per costruire un Object grazie alla reflection.

    L'object ottenuto lo serializzo con ObjectOutputStream senza nessun'eccezione, però quando vado a deserializzazrlo con ObjectInputStream mi da il seguente errore:

    Exception in thread "main" java.lang.ClassNotFoundException: prenotation.Address at java.net.URLClassLoader$1.run(URLClassLoader.java: 202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.j ava:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:3 07) at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:2 48) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at java.io.ObjectInputStream.resolveClass(ObjectInput Stream.java:603) at java.io.ObjectInputStream.readNonProxyDesc(ObjectI nputStream.java:1574) at java.io.ObjectInputStream.readClassDesc(ObjectInpu tStream.java:1495) at java.io.ObjectInputStream.readOrdinaryObject(Objec tInputStream.java:1731) at java.io.ObjectInputStream.readObject0(ObjectInputS tream.java:1328) at java.io.ObjectInputStream.readObject(ObjectInputSt ream.java:350) at javaapplication7.JavaApplication7.main(JavaApplica tion7.java:66)

    Secondo voi perché non riconosce la classe caricata precedentemente al momento della deserializzazione?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    la classe è dichiarata serializzabile? tutto il suo contenuto è serializzabile?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51
    Originariamente inviato da valia
    la classe è dichiarata serializzabile? tutto il suo contenuto è serializzabile?
    Si la classe è Serializable e anche i suoi membri sono Serializable.
    Contiene solo campi String e un int.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    e i package sono corretti??come li dichiari e come li cerchi?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51
    codice:
    URL[] urls = {new File("test.jar").toURI().toURL()}; 
    URLClassLoader ucl = new URLClassLoader(urls, ClassLoader.getSystemClassLoader()); 
    Class<?> cl = ucl.loadClass("prenotation.Address");
    questo è come carico la classe in questione, nel jar c'è la cartella META-INF e la cartella prenotation e all'interno il file Address.class che appartiene al package


    codice:
    package prenotation

    il file viene scritto senza nessun problema, e al momento dell lettura che non trova la classe Address.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    tu gli chiedi

    prenotation.Address

    mentre hai

    stywer.prenotation.Address

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51
    scusa ho sbagliato io nel scrivere il package.

    codice:
    package prenotation;

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    come esegui il tutto? sei sicuro che il tuo jar sia nel path di esecuzione?

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51
    non posso mettere il jar nel path di esecuzione perché vorrei poter caricare il jar con le relative classi durante l'esecuzione del prigramma

  10. #10
    Originariamente inviato da detrots
    non posso mettere il jar nel path di esecuzione perché vorrei poter caricare il jar con le relative classi durante l'esecuzione del prigramma
    Se il JAR non è nel classpath come pretendi che possa essere trovata la classe da caricare?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.