Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] Trasparenza rispetto al JAR

    Riposto il codice scritto per trovare le sottoclassi istanziabili di una certa classe astratta data come argomento.
    (Non fate caso ai generics, se non li metto mi da dei warning, ma ancora non ho capito il senso di parametrizzare la classe Class...)
    Vorrei modificarlo in modo che funzioni anche dall'interno di un file JAR.

    codice:
        public final static <T extends Object> Class[] getSubclasses(Class<T> c) {
            String pacchetto = c.getPackage().getName(); // Nome pacchetto
            String path = c.getResource(".").getFile(); // QUI DA ERRORE: getResource() = null!!!
            System.out.println(path);
            File dir = new File(path); // Trasforma in File
            File[] classi = dir.listFiles(); // Leggi tutti i File nella directory
            ArrayList<Class> istanziabili = new ArrayList<Class>(classi.length);
            Class subclass=null;
            
            for (File f : classi) {
                String r = pacchetto + '.' + f.getName();
                try {
                    subclass = Class.forName(r.replaceFirst(".class",""));
                    if ( Modifier.isAbstract(subclass.getModifiers()) )
                        continue;
                    if (c.isAssignableFrom(subclass)) // subclass e' assegnabile a c
                        istanziabili.add(subclass);
                } catch (Throwable t) {}
            }
            Class[] lista = new Class[istanziabili.size()];
            lista = istanziabili.toArray(lista);
            return lista;
        }
    Mi date una mano?
    L'errore e' alla terza riga... sigh...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  2. #2
    Ho trovato l'inghippo...
    Nei JAR non esiste "." come alias della directory attuale!!!
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    codice:
    String path = c.getClassLoader().getResource(pacchetto).getFile();
    File dir = new File(path); // Trasforma in File
    In questo modo funziona ancora con i file "esplosi" e riesco a leggere il percorso relativo al JAR:

    file:\C:\jdek\Lotto\dist\Lotto.jar!\ruote

    Ma se faccio dir.listfiles() non ritorna niente.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.