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:
La fonction "setModelFromFilePathFormats" comprend 2 paramètres:
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.defaultListModel = this.mainView.getModel().setModelFromFilePathFormats("import", "*.vcf", "*.txt");
-le path du dossier qui contient une éventuelle liste de fichiers
-les formats autorisés
La fonction ce 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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 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; }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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 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)); }
Comment est ordonné mon projet sous l' ide:
Pour récupérer mon "import", j'ai essayé diverses solutions comme ci dessous mais sans succès:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17monProjet .idea .lib ..lib1 ..etc .out ..artifacts ...monProjet_jar ....monProjet.jar ..production .resources ..import ..image .src ..class1 ..class2 ..etc
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 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");
Quelque chose doit m'échapper la dedans car cela semble apparemment simple, on parle d'un path avec des fichiers dedans. Mais dans un jar, on semble sortir du cadre de la simplicité
Partager