Java jar et problème de path
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:
Code:
this.defaultListModel = this.mainView.getModel().setModelFromFilePathFormats("import", "*.vcf", "*.txt");
La fonction "setModelFromFilePathFormats" comprend 2 paramètres:
-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:
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;
} |
Code:
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));
} |
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:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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:
Code:
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"); |
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.
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é