Visualizzazione dei risultati da 1 a 4 su 4

Discussione: java ClassLoader

  1. #1

    java ClassLoader

    Salve a tutti..sto realizzando un classloader personalizzato per caricare classi dal disco a runtime.
    Il problema è che non riesco a capire perche il mio codice non va.
    Forse sbaglioo qualche cosa ma non riesco a vedere l'errore.

    ecco il codice:

    codice:
     public static void main(String[] args) throws ClassNotFoundException, FileNotFoundException, IOException {
          
         Loader load = new Loader();
        
         Class cls = load.loadClass("/Users/NetBeansProjects/testClass/build/classes/testclass/testClass.class");
         System.out.println(cls.getName());
        }


    codice:
    public class Loader extends ClassLoader {
    
        @Override
        public Class loadClass(String nameclass){
            Class result=null;
            byte  classData[]=null;
            try{
        
            FileInputStream file = new FileInputStream(nameclass);
            classData=new byte[file.available()];
            file.read(classData);
    
            result= defineClass(null,classData,0,classData.length);
            }catch(Exception e){System.out.println(e.getMessage());}
            return result;
    
        }
        
    }
    Come vedete io passo al mio classloader il path del file .class da caricare e lo leggo tramite FileInputStream;
    poi chiamo il metodo defineClass per creare effettivamente la mia classe.
    pero non funziona.

    ottengo questi errori :

    Exception in thread "main" java.lang.NoClassDefFoundError: testClass (wrong name: testclassloader/testClass)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java :676)
    at java.lang.ClassLoader.defineClass(ClassLoader.java :521)
    at testclassloader.Loader.loadClass(Loader.java:28)
    at testclassloader.Main.main(Main.java:27)
    Java Result: 1

    sapete aiutarmi?
    grazie in anticipo.
    marco

  2. #2
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Ipotesi: può essere che la VM non apprezzi il fatto che la classe che vuoi caricare, pur appartenendo al package "testclassloader", non sia contenuta in una directory che ha questo nome?

  3. #3
    la classe che devo caricare non appartiene al package corrente,altrimenti sarebbe gia in cache.
    è una classe posta in un path diverso su disco e devo caricarla.

  4. #4
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Sì, e questo era chiaro.
    Quello che voglio dire è che la tua classe è posizionata nella directory "/testclass", mentre da quel che mi pare di capire appartiene al package "testclassloader"

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.