Partage
  • Partager sur Facebook
  • Partager sur Twitter

java compilation jar et problème de path

    22 juillet 2021 à 21:40:33

    Bonjour,

    j'aimerais vos conseils pour faire fonctionner mon projet fait sous intellj en dehors de celui-ci.
    Dans mon programme, j'ai des ressources qui se trouvent dans des dossiers.
    J'ai besoin soi d'un fichier dans un dossier en particulier, par exemple un image qui me permet d'illustrer un simple bouton.
    Où encore, plus important, le chemin vers un dossier. Ce dossier en question se nomme "import" et me permet d'importer à l'intérieur des fichiers sur lesquels je pourrais travailler dans l'application. Normalement, il est possible d'importer uniquement des fichiers avec un format valide.
    A partir de là, je peux récupérer la liste des fichiers présent dans le dossier import pour effectuer diverses tâches.


    Un exemple de fonctionnement:

    Je veux créer un objet "DefaultListModel" afin de me permettre de remplir une JList.
    J'écris donc cette ligne:

    this.defaultListModel = this.mainView.getModel().setModelFromFilePathFormats("import", "*.vcf", "*.txt");

    a fonction "setModelFromFilePathFormats" comprend 2 paramètres:

    -le path du dossier qui contient une éventuelle liste de fichiers
    -les formats autorisés

    La fonction se découpe en 2 :

    -elle comprend une autre fonction "getListOfFiles" qui récupère la liste des fichiers suivant un format

    -puis elle construit elle même l'objet "DefaultListModel" avec le résultat précédent.


        protected DefaultListModel setModelFromFilePathFormats(String path, String... formats) {
            File[] f = this.getListOfFiles(path, formats);
         
            DefaultListModel model = new DefaultListModel();
            model.ensureCapacity(200);
         
            for (File file : f) {
                model.addElement(file.getName());
            }
            return model;
        }

    La fonction "getListOfFiles":

        protected File[] getListOfFiles(String path, String... formats) {
            int nbOfFormat = formats.length;
            String[] typeFile = new String[nbOfFormat];
            int incr = 0;
            for (String format : formats) {
                typeFile[incr] = format;
                incr++;
            }
            File dir = new File(path);
            return dir.listFiles((FileFilter) new WildcardFileFilter(typeFile));
        }

    Dans mon IDE, tout cela marchait bien mais maintenant, quand je veux faire fonctionner mon programme à partir d'un fichier '.jar', c'est la catastrophe et je me retrouve avec des erreurs comme celle-ci: "AWT-EventQueue-0" java.lang.NullPointerException:

    Comment est ordonné mon projet sous l' ide:

        monProjet
        .idea
        .lib
        ..lib1
        ..etc
        .out
        ..artifacts
        ...monProjet_jar
        ....monProjet.jar
        ..production
        .resources
        ..import
        ..image
        .src
        ..class1
        ..class2
        ..etc

    Pour récupérer mon "import", j'ai essayé diverses solutions comme ci dessous mais sans succès:

        String path = MaClasse.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        String decodedPath = URLDecoder.decode(path, "UTF-8");
        decodedPath +="import";
        this.defaultListModel = this.mainView.getModel().setModelFromFilePathFormats(decodedPath , "*.vcf", "*.txt");

    De plus, j'ai cru comprendre que même si j'arrivais à fournir le bon path, la suite ne fonctionnerait pas car le fonctionnement dans un .jar n'est pas aussi simple.







    -
    Edité par OufOuf123 22 juillet 2021 à 21:43:46

    • Partager sur Facebook
    • Partager sur Twitter
      23 juillet 2021 à 17:08:29

      Présenté comme ça, ça mélange plein de trucs. Des modèles, des vues, etc.

      A mon avis le souci que tu as c'est que tu veux parcourir un ensemble de fichiers, organisés en répertoire, en tant que ressources dans un jar.

      C'est à dire:

      • pouvoir trouver les noms des ressources (genre getListofFiles)
      • pouvoir les ouvrir ensuite.

      J'ai l'impression qu'en toute généralité, c'est difficile à faire. Les méthodes findResource(s) de ClassLoader n'acceptent pas de "joker".

      https://stackoverflow.com/questions/5193786/how-to-use-classloader-getresources-correctly

      Mais bon, c'est pas un vrai problème. Dans un jar, les ressources ne bougent pas, il suffit d'y mettre une ressource qui donne la liste des ressources concernées.

      -
      Edité par michelbillaud 23 juillet 2021 à 17:24:51

      • Partager sur Facebook
      • Partager sur Twitter

      java compilation jar et problème de path

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown