Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Metodo forName..Se qualcuno riesce a capire!!

    Se canonicalName termina con * allora dovrei caricare tutte le classi che stanno nel package.
    Per semplificare adesso provo solo a caricare a classe jcoomlShell.comandi che so che funziona.

    Il problema sta in esploraFile..che mi trova tutte le classi del package(come è giusto che faccia) e me le stampa..se però aggiungo il metodo forName() mi solleva l'errore class not found


    Questo è il mio codice, qualsiasi consiglio è bene accetto..

    public class ImplCommand implements Command{
    private static int count = 0;
    private static File from;
    private static String canonicalName;

    private static String subCanonical;
    private static String dacanc;

    public ImplCommand(){
    lc = new HashSet<LoadClass>(); /**/
    }

    public String exec(){

    canonicalName="jcoomlShell.comandi.*";
    /**/


    if (canonicalName.endsWith("*")){

    subCanonical=canonicalName.substring(0, canonicalName.length()-1);

    try {
    String userDir = System.getProperty("user.dir");

    System.out.println(userDir);
    //directory dove cercare i file con determinate estensioni
    from = new File(userDir);

    //estensione del file da cercare.
    String tipo = ".class";
    //metodo ricorsivo che esplora la directory from
    esploraFile(from, tipo);
    if(count==0)
    System.out.println("Nessun file trovato");
    } catch (NullPointerException e) {
    System.err.println("Wrong path");
    }
    }


    return canonicalName;
    }

    public static void esploraFile(File from, String tipo) {
    //utilizziamo per la ricerca un filtro
    File[] files = from.listFiles(new Filter(tipo));


    for (int i = 0; i < files.length; i++) {
    if (files[i].isFile()){
    try {


    Class.forName(jcoomlShell.comandi);

    System.out.println(count + " " + files[i].getName());


    count++;


    }
    catch (Exception e) {
    System.err.println("Class not found!");
    } ;
    }

    else
    esploraFile(files[i],tipo);

    }

    }


    LO so che così caricherà solo la classe jcoomlShell.comandi ma so per certo che è corretto come parametro infatti se l'aggiungo in exec(), forName viene eseguita correttamente.
    Se riesco a capire perchè nonfunziona allora posso caricare tutte le classi

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Innanzitutto il metodo forName() si aspetta il nome "fully qualified" di una classe, quindi completo di package (se ce l'ha) come ad esempio "com.pippo.Pluto". Inoltre il file .class deve essere "visibile" alla JVM.

    Ammesso di voler scansionare una certa directory qualunque, trovare tutti i file .class e usare forName per caricare le classi, la cosa funzionerebbe solo se A) La directory è in classpath e B) le classi appartengono al package "unnamed" (quello di default).

    P.S.: il tuo codice è abbastanza confuso ... magari spiega meglio cosa vuoi fare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013

    Re: Metodo forName..Se qualcuno riesce a capire!!

    forName prende come parametro una String, quindi quanto meno andava tra apici. Poi non è che sia chiarissimo quel che vuoi fare.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da andbin
    P.S.: il tuo codice è abbastanza confuso ... magari spiega meglio cosa vuoi fare.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Prima di tutto grazie per l'aiuto..
    in poche parole devo prendere questa classe che mi viene passata come parametro, se per esempio è pippo.* devo caricare tutti i file .class che ho nel package pippo..
    Esplorafile() mi serve solamente per trovare tutti i file .class del package, che avevo poi intenzione di caricarli con forName()
    A questo punto mi sa che devo rifare allora.. tu cosa mi consiglieresti...

    C'è qualche modo per trovare tutti i file .class che stanno in un package, e caricarli poi?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Paoletta_r
    in poche parole devo prendere questa classe che mi viene passata come parametro, se per esempio è pippo.* devo caricare tutti i file .class che ho nel package pippo..
    Non c'è alcun modo "standard" per elencare le classi che appartengono ad un package. Per i seguenti motivi:

    a) Le classi che appartengono ad uno stesso package potrebbero essere "sparse" in più JAR o directory differenti.

    b) Ci potrebbero essere classloader particolari che caricano le classi da sorgenti specifiche (es. dalla rete piuttosto che dal file-system).

    c) Si possono addirittura creare classloader speciali che generano il bytecode della classe a run-time (cioè senza caricare alcun .class).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    qualche informazione la recuperi anche in questa discussione

    http://forum.java.sun.com/thread.jsp...hreadID=341935
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Che qualcuno sappia la funzione loadClass funziona solo per il package di default come avviene per forName?
    Domani devo vedermi con il relatore ed è una corsa contro il tempo

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Paoletta_r
    Che qualcuno sappia la funzione loadClass funziona solo per il package di default come avviene per forName?
    Cosa c'entra il package di default??!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Poniamo che ho 2 package pippo e pluto se sto lavorando nel package pluto la classe che sta in pippo con forName non la trova(anche se passo il path giusto)..proprio come avevi detto tu:" le classi appartengono al package "unnamed" (quello di default)."
    Grazie a te ho scoperto questa cosa.. adesso devo trovare il modo per caricare sia le classi di pluto sia le classi che stanno in pippo..

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.