[JAVA] Lister le contenu d'un paquetage

Autant pour moi, ce que tu fais est faux de base.

Si une méthode est statique, tu n’as pas à paramétrer la classe (je crois pas que ça marche, vérifierait demain)

ah ?

J’ai un ensemble de classes dans un paquetage (x.ldap.syntax), toutes ces classes héritent d’une classe abstraite du paquetage supérieur (x.ldap.SchemaSyntax).

Dans une JComboBox, j’ai tous mes noms de classes. Quand je clique sur valider, je prends le nom sélectionné dans la JComboBox, auquel je lui attache le nom du paquetage. Ensuite, je créer une instance de cette classe, à partir de Class. Une fois créé, je n’ai plus besoin de connaitre le type de l’objet, tout ce que j’ai besoin de savoir c’est que c’est un objet qui hérite de SchemaSyntax.

Qu’entends tu alors par “ce que tu fais est faux de base.” ? Expliques moi, help !

EDIT : Pour plus tard ^^

import java.util.jar.*;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLDecode;
import java.util.Arrays;

public static String[] getSyntaxes() {

  String[] result = null;

  try {

  	String packageName = getSyntaxPackageName();
  	URL url = Schema.class.getResource(
    	"/" + packageName.replace( '.', '/' ) );

  	if( url==null )
    return null;

  	String protocole = url.getProtocol().trim().toLowerCase();

  	if( protocole.equals( "jar" ) ) {

    // URLDecode pour supprimer les caractères spéciaux
    // d'une URL comme les %20 !!! Très important !!!

    int index = url.getPath().indexOf( '!' );
    String pack = URLDecoder.decode(
      url.getPath().substring( index+1 ), "UTF-8" );
    String path = URLDecoder.decode(
      url.getPath().substring( 5, index ), "UTF-8" );

    if( pack.charAt(0)=='/' )
    	pack = pack.substring( 1 );
    if( path.charAt(0)=='/' )
    	path = path.substring( 1 );

    JarFile jarFile = new JarFile( path );
    Enumeration<JarEntry> jarFiles = jarFile.entries();
    Vector<String> vectTmp = new Vector<String>();

    while( jarFiles.hasMoreElements() ) {
    	JarEntry tmp = jarFiles.nextElement();

    	// Pour chaque fichier dans le jar, on regarde si c'est un
    	// fichier de classe Java.

    	if( !tmp.isDirectory()
      	&& tmp.getName().substring( tmp.getName().length()-6 ).equals( ".class" )
      	&& tmp.getName().startsWith( pack ) ) {
      int i = tmp.getName().lastIndexOf( '/' );
      vectTmp.add( tmp.getName().substring( i+1, tmp.getName().length()-6 ) );
    	}
    }

    jarFile.close();

    result = new String[vectTmp.size()];
    for( int i=0; i<vectTmp.size(); i++ )
    	result[i] = vectTmp.elementAt( i );

  	} else if( protocole.equals( "file" ) ) {

    // On cr le fichier associ pour parcourir son contenu.
    // En l'occurence, c'est un dossier.
    File[] files = (new File( url.toURI() )).listFiles();

    // On liste tous les fichiers qui sont dedans.
    // On les stocke dans un vecteur ...
    Vector<File> vectTmp = new Vector<File>();
    for( File f: files ) {
    	if( !f.isDirectory() )
      vectTmp.add( f );
    }

    	// ... pour ensuite les mettres dans le tableau de resultat.
    result = new String[vectTmp.size()];
    for( int i=0; i<vectTmp.size(); i++ ) {
    	String name = vectTmp.elementAt( i ).getName();
    	int a = name.indexOf( '.' );
    	name = name.substring( 0, a );
    	result[i] = name;
    }
  	}

  // Erreur chargement nom de classe.
  } catch( Exception e ) {
  	System.out.println( e );
  	e.printStackTrace();
  }

  if( result!=null )
  	Arrays.sort( result );

  return result;

	}