Seticon

bonjours

je viens a vous car j’ai un soucie sur un programme personnel en java…

voila, j’ai dans mon projet, une IHM, constitué d’un JFileChooser, cette IHM, récupère le chemin, d’un fichier (en l?occurrence, une image) et la définie comme “icone” sur un JLabel, jusque la tout fonctionne!

Ensuite, le chemin de l’image ( image.GetAbsolutePath() ) est enregistrée dans un fichier texte.

enfin, dans le constructeur de mon IHM principale, je viens lire le fichier ou j’ai stocké le dit chemin, pour que l’image sois chargée au démarrage.
or, au démarrage l’image ne se charge pas! je récupère pourtant le chemin issu du fichier, et j’utilise la même méthode pour définir " l’icone " , mais le problème, c’est que ça ne marche pas!!!

En esperant avoir été assez clair… Merci par avance du temps que vous passerez a m’aider… :slight_smile:

Salut,

Sans bout de code, il va nous être difficile de pouvoir t’aider.

Néanmoins, es-tu certains que le path de ton fichier est correctement chargé au démarrage ? (affichage du path dans la console ou débugger)

oui oui j’ai bien vérifié…(excuse moi pour ma réponse tardive!) que veux tu exactement comme bout de code? la classe qui lit mon fichier, ou la méthode qui l’appelle? avec son appel? je vais tout te mettre par sécurité : en premier la fonction de lecture ou Image_Background est le chemin du fichier de sauvegarde

 public String Read_Background()
    {
        String lecture = null;
         FileReader ffr = null;
    
        try {
             ffr = new FileReader(Image_Background);
             
         } catch (FileNotFoundException ex) {
             Logger.getLogger(FileModifier.class.getName()).log(Level.SEVERE, null, ex);
         }
         if (Image_Background.exists())
         {
            try {
                char[]tab = new char[100];
                ffr.read(tab);
                
                lecture = String.valueOf(tab);
                
                return lecture;
               
            } catch (IOException ex) {
                Logger.getLogger(FileModifier.class.getName()).log(Level.SEVERE, null, ex);
            }
            
        }
    return null;

ensuite : lappelle de la dite fonction :

String Image = fm.Read_Background();
         System.out.println(Image);
         Background.setIcon(new javax.swing.ImageIcon(Image));

j’espere que cela t’eclairera…

Aucune ame charitable pour se pencher sur mon probleme?..:frowning:

Et il vaut quoi le “Image” ?

docs.oracle.com…

Tu as bien un chemin correct ?

Tu as tenté le constructeur ImageIcon(byte[])[/url] en utilisant par exemple [url=http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#readAllBytes%28java.nio.file.Path%29]Files.readAllBytes pour lire le contenu de ton fichier ?

non, c’est vrai que je n’ai pas essayé, mais la question est que je eux mettre une icone n’importe quand avec la meme methode, c’est juste au demarage que cela bloque, et oui j’ai bien le bon chemin de l’inmage étant donné que je fait un affichage de la variable “image” au demarrage de l’ihm…

Sauf que tu ne nous dis pas ce que vaut ce chemin ? En particulier sur les slashes.
Surtout que si tu utilises des JFileChooser, et sous Windows à plus forte raison, tu vas forcément avoir un chemin avec ces backslashes.
Si tel est le cas, il faut transformer le chemin en URL, avec au choix:

Path.toUri
File.toUri

Ou, recharger l’image d’une autre façon.
Edité le 20/10/2015 à 00:23

hum… quand tu parle de “reharger” l’image, tu parles par exemple de la methode Repaint de la classe Graphics?
pour ce qui es de la valeur de ce chemin, il vaut ca : C:/Users/…/… (un chemin normal quoi, mais peut etre que je devrait rajouter le slash d’echappement car quand on declare un File le chemin se fait avec //… a creuser j’esper que c’est une bonne piste ^^ en tout cas merci de m’aider autant

Par recharger, j’entends passer par les fonctions dont je parle dans mon autre message : www.clubic.com…

Et le chemin est “normal”, non. Faut faire attention à deux choses:

  • Tu es sous Windows et le séparateur de fichier c’est l’antislash, pas le slash. Parfois, Windows gère les chemins avec slashes, mais pas tout le temps (ex: fait Ctrl S sous Firefox, et vérifie la différence entre le chemin dans la barre d’adresse, et le chemin que tu peux taper pour le nom du fichier).
  • L’API utilise une URI, soit quelque chose de ce genre : file: /// C:/Users/Public/ (sans les espaces).
    Edité le 28/10/2015 à 00:53

j’ai essayé avec differents syntaxes mais rien n’y fait, il semblerai que c’est le probleme du caractere d’echappement qui ne vas pas… j’ai essayé de rajouter par unemethode des a ma chaine de caractere mais rien n’y fait… en revanche si je declare une String au format : C:\ xx\xx\ ca marche…je comprend pas…

bonjours bonjours, juste pour vous dire que mon problème est résolu, en tatonnant un peu je me suis rendu compte que c’etai ma manière de lire mon fichier qui n’allait pas, je le fait maintenant par un InputStreamReader via la methode Readline(), et ca arche parfaitement :smiley: désolé de vous avoir embétés avec cela et merci au temps que vous m’avez consacrés! :slight_smile: