IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

chargement d'une image


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 111
    Par défaut chargement d'une image
    bonsoir
    je suis débutant en java et j'essaye de me "former" un peu ,
    après la consultation de quelques tutoriaux , j'arrive a taper le code suivant
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package monimage;
    import javax.swing.*;
    import java.awt.*;
     
    class affiche extends JPanel
    {
      Image fond, monde;
     
      affiche(String s)
        {
          fond = getToolkit().getImage(s);
          monde = getToolkit().getImage("world.jpeg");
          setPreferredSize(new Dimension(300, 200));
        }
     
        @Override
      public void paintComponent(Graphics g)
      {
        super.paintComponent(g);
        g.drawImage(fond, 0, 0, getWidth(), getHeight(), this);
        g.drawImage(monde, 30, 30, this);
      }
    }
     
    class monimage extends JFrame
    {
      monimage(String s)
      {
        setContentPane(new affiche(s));
      }
     
      public static void main(String[] args)
      {
        monimage monCadre = new monimage(args [0] );
        monCadre.pack();
        monCadre.setVisible(true);
      }
    }
    ca me génère
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at monimage.monimage.main(monimage.java:34)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)

    et je ne comprend pas comment remédier a mon petit problème ,

    un petit help SVP

  2. #2
    Membre expérimenté Avatar de akrom
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Comment lance tu ton appli car il lui faut au lancement un argument qui est le nom du fichier image.Vu l'erreur, l'Argument[0] que demande l'appli pour fonctionner n'existe pas.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 111
    Par défaut
    bonjour akrom
    merci tout d'abord pour avoir répondu

    j'ai crée un dossier monimage , et le fichier source est appelé ainsi aussi , je travaille sous netbeans ,

    je ne sais pas si j'ai bien compris la remarque ou je passe a coté, je croyais que c'était une question de tableau .....

  4. #4
    Membre expérimenté Avatar de akrom
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Lorsque tu lance une appli java tu peut lui donner en parametre un tableau d'arguments qui se récupere ansi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void main(String[] args)
    donc quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monimage monCadre = new monimage(args [0] );
    Tu récupère la String args[0] que tu passe en parametre à monimage(String s).
    Hors si tu ne passe pas de parametre au lancement de l'appli args[0] n'existe pas d'ou java.lang.ArrayIndexOutOfBoundsException: 0
    Netbeans par defaut ne donne pas de parametre a l'appli il te faut lui indiquer dans les proprietées du projet.
    Sinon tu peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monimage monCadre = new monimage("/chemin/nom_de_l'image.jpg" );

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 111
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Tu récupère la String args[0] que tu passe en parametre à monimage(String s).
    Hors si tu ne passe pas de parametre au lancement de l'appli args[0] n'existe pas d'ou java.lang.ArrayIndexOutOfBoundsException: 0
    Netbeans par defaut ne donne pas de parametre a l'appli il te faut lui indiquer dans les proprietées du projet.
    ce que vous dites est tout a fait logique , mais je croyais que le chemin de l'image sera apporté par le constructeur de la classe Affiche......

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monimage monCadre = new monimage("/chemin/nom_de_l'image.jpg" );
    j'ai suivi votre code et il y a une legere amelioration : l'application tourne et le conteneur s'affiche , mais pas l'image , savez vous pourquoi ? merci

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour charger une image il est recommandé de passer par ImageIO.read qui s'assure que l'image est bien chargée à la fin de l'appel et jette une exception si l'image n'est pas trouvée et non par Toolkit.getToolkit.getImage qui lance un chargement asynchrone et ne permet pas de s'assurer du bon chargement de l'image.

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 111
    Par défaut
    merci sinok pour votre réponse
    ok, je vous suis: ImageIO.read est plus "stable" mais quel est le rôle de getToolkit().getImage alors, si ce n'est que de charger des images

    j'ai fait avec ImageIO et la j'ai un petit problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage monde = ImageIO.read(F);
    cette ligne est soulignée par le netbeans en cliquant dessus j'obtiens :
    unreported exception java.io.IOexception,must be caught or declared to be thrown

    une idée SVP ?

  8. #8
    Membre expérimenté Avatar de akrom
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    avec ImageIO.read(f) une exception est levé si l'image n'existe pas.Cette exception doit etre catché .
    Netbeans doit te le faire automatiquement avec un clic droit sur le triangle jaune devant ta ligne de code.

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 111
    Par défaut
    oui netbeans me l'a fait signaler c'est vrai et je viens d'y remédier , maintenant y'a plus de bug mais quand j'exécute l'image ne s'affiche pas
    ca me dit ca ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void main(String[] args) throws IOException
      { if (args.length==1) {
        monimage monCadre = new monimage();
     
        monCadre.pack();
        monCadre.setVisible(true);
      } else {System.out.println("ca ne marche pas");}
      } }
    une idée SVP ?

  10. #10
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    La variable args correspond aux arguments passés à la ligne de commande.

    Or en faisant un tu vérifies qu'il y a un et un seul argument à l'appel de ton programme.

    De fait le code de ton main ne s'exécutera uniquement si tu fournis un et un seul argument à ta ligne de commande. (c'est à dire après le nom de ta classe).

    Bref tout ça pour dire qu'il est un peu trop tôt pour toi pour aller les mettre les mains dans les API avancées telles que Swing et que tu ferais mieux d''aller réviser les cours/tutos de base de java....

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 111
    Par défaut
    bonjour
    insérer une condition avec args == 1 est une idée d'Akrom pas la mienne, mais j'ai fini par l'utiliser en espérant que ca marchera ..

    j'ai déjà établi un chargement d'image avec imageIO.read
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    package affichage;
     
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
     
    public class affichage {
     
     
    	public static void main(String[] args) {
    		try {   File F = new File("C:/world.jpg");
    			BufferedImage img = ImageIO.read(F);
    			JFrame frame = new JFrame();
    			frame.getContentPane().add(new JLabel(new ImageIcon(img)));
    			frame.pack();
    			frame.setVisible(true);
    		} catch (IOException e) {
    		}
    	}
     
    }
    Seulement je voudrais l'effectuer avec getToolkit().getImage(s)
    merci d'avance pour celui qui pourra m'aider a trouver la panne

  12. #12
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    C'est bien de mettre des catch, mais c'est quand même vaaaaaachement beaucoup mieux d'afficher l'exception générée si il y en a une qui survient.

    Ajoute un afin de savoir quelle est l'erreur.


    Bon bref pour être sérieux, vaudrait mieux que tu retourne aux bases du java avant de t'attaquer à ce genre de choses. Tu vas t'embrouiller l'esprit si tu ne connais pas un tant soit peu le langage.

  13. #13
    Membre expérimenté Avatar de akrom
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    insérer une condition avec args == 1 est une idée d'Akrom pas la mienne, mais j'ai fini par l'utiliser en espérant que ca marchera ..
    Je n'ai jamais dit ca ! Dans mes posts précédent je t'explique pourquoi tu avais une erreur java.lang.ArrayIndexOutOfBoundsException: 0 et que ton appli comme elle était écrite au départ demandais un paramètre pour fonctionner.
    Bon bref pour être séreux, vaudrait mieux que tu retourne aux bases du java avant de t'attaquer à ce genre de choses. Tu vas t'embrouiller l'esprit si tu ne connais pas un tant soit peu le langage.
    +1

  14. #14
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 111
    Par défaut
    bonsoir
    @ akrom : désolé pour la args == 1 enfin c'est ce que j'avais compris de ta réponse

    @ sinok : en effet je manque de cours concernant le java (j'ai téléchargé le cours développons en java et j'y travaille depuis des semaines )

    mais je croyais que charger une image n'était pas aussi difficile que ca , d'ailleurs ca a marché avec ImageIO.read,
    je tenterais d'y travailler plus

    merci quand meme les amis

  15. #15
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par freddy000 Voir le message
    bonsoir

    mais je croyais que charger une image n'était pas aussi difficile que ca , d'ailleurs ca a marché avec ImageIO.read,
    je tenterais d'y travailler plus
    .

    Honnêtement c'est loin d'être dur. C'est juste que la méthode via Toolkit est antidéluvienne (date de java 1.0), pas forcément bien conçue (ce chargement asynchrone avec les concept d'ImageProducer est d'un intérêt très limité quand on a des Threads et ImageIO à disposition) et a une certaine tendance à ne pas signaler les problèmes (fichier non trouvé & cie).
    De fait de nos jour la méthode standard et propre est d'utiliser ImageIO pour ce genre de tâches, qui est synchrone (donc l'image est chargée quand on passe à la ligne suivante) et propre (retourne des exceptions dans le cas où l'image n'a pu être chargée ou trouvée).

Discussions similaires

  1. Chargement d'une image avec evc4.0
    Par gids01 dans le forum MFC
    Réponses: 1
    Dernier message: 14/11/2005, 20h39
  2. Chargement d'une image
    Par gids01 dans le forum MFC
    Réponses: 1
    Dernier message: 31/10/2005, 14h27
  3. Réponses: 2
    Dernier message: 02/09/2005, 20h47
  4. Vitesse de chargement d'une image jpg ?
    Par ybruant dans le forum Langage
    Réponses: 6
    Dernier message: 16/11/2004, 20h42
  5. [debutant]Chargement d'une image de mes documents
    Par reineville dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/03/2004, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo