[Résolu] Soucis avec les ressources
Bonsoir,
j'essaie d'intéger des ressources dans une archive jar.
J'ai fait un paquetage org.applications.calculette puis
j'ai mis mes ressources dans les repertoires :
org/applications/calculette/resources/images et
org/applications/calculette/resources/fonts
Pour les images, j'utilise :
URL urlImageZero = getClass().getResource("/resources/images/imgZero.gif");
puis
button[i]=new JButton(buttonNom[i],new ImageIcon(buttonImage[i]));
et ca marche nickel.
En lisant la FAQ, j'ai voulu bien faire avec la fonte et j'ai crée cette classe :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| private Font setResourceFont(String fileName) {
Font font;
FileInputStream ttf = null;
String pathFileName = new String(getClass().getResource("/resources/fonts/" + fileName + ".ttf").toString());
try {
ttf = new FileInputStream(pathFileName);
font = Font.createFont(Font.TRUETYPE_FONT, ttf);
return new Font(font.getFamily(), Font.BOLD, 24);
} catch (FileNotFoundException ex) {
System.out.println("FileNotFoundException");
} catch (FontFormatException ex) {
System.out.println("FontFormatException");
} catch (IOException ex) {
System.out.println("IOException");
} finally {
try { ttf.close(); }
catch (Exception ignore) {}
font = new Font("Serif", Font.BOLD, 22);
return font;
}
} |
puis j'utilise setResourceFont("Lucida_Calligraphy_Italic");
mais java me lève une erreur :
Code:
1 2 3
|
java.io.FileNotFoundException: file:\C:\Users\greg\Documents\NetBeansProjects\Calculette\build\classes\resources\fonts\Lucida_Calligraphy_Italic.ttf (Syntaxe du nom de fichier, de répertoire ou de volume incorrecte)
at java.io.FileInputStream.open(Native Method) |
que je ne comprends pas parce que mon fichier Lucida_Calligraphy_Italic.ttf est à la bonne place il me semble. Merci de votre aide ;)
[Resolu] Enfin une solution :)
J'apprends quelque chose, c'est déjà pas mal : Ton finally avec l'exception ignoré est potentiellement dangereux. De même il serait préférable d'éviter le try/catch/finally qui peut être casse-gueule et préférer un [b]try/finally dans un [b]try/catch
Je m'en étais rendu compte, mais je n'avais de solution : Ton return dans un bloc finally est encore pire : il prendra TOUJOURS le dessus l'autre return de ton code...
Je confirme pour avoir tester : Enfin tes manipulations sur l'URL de la ressource sont en effet ultra-spécifique de l'emplacement exact de ta ressource. Ainsi si tu packages tout cela en JAR cela ne marchera plus.
J'ai cru bien faire : dans la faq http://java.developpez.com/faq/java/...policeTrueType, on peut lire :
"depuis le système de fichiers :
ttf = new FileInputStream("/aaa/bbb/ccc/ARIALN.TTF");"
Peut-être un manque d'habitude de ma part.
Bref, finalement, en supprimant le premier caractère slash dans le chemin du fichier de la fonte, la méthodes fonctionne très bien :):).
Je l'écris des fois que cela puisse resservir ! Merci beaucoup ;)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
private Font setResourceFont(String fileName) {
try {
InputStream ttf = getClass().getResourceAsStream("resources/fonts/" + fileName + ".ttf");
try {
Font font = Font.createFont(Font.TRUETYPE_FONT, ttf);
return font.deriveFont(Font.BOLD, 24);
} finally {
ttf.close();
}
} catch (FontFormatException ex) {
System.out.println("FontFormatException");
} catch (IOException ex) {
System.out.println("IOException");
}
return new Font("Serif", Font.BOLD, 22);
} |