Partage
  • Partager sur Facebook
  • Partager sur Twitter

Impossible d'afficher une image

Sujet résolu
    22 août 2009 à 18:58:10

    Bonjour,

    J'ai lu plein de trucs afin de trouver comment afficher une image en java, et voici mon code :

    import java.awt.Color;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    
    public class Fenetre extends JFrame{
    
    	
    	Fenetre()
    	{
    		
    
    		JLabel canon = new JLabel(new ImageIcon("canon.gif"));
    
    		
    		
    		JPanel container = new JPanel();
    		container.setBackground(Color.BLACK);
    
    
    		setTitle("Alakazam");
    		setSize(700,600);
    		setResizable(false);
    		setLocationRelativeTo(null);
    		setContentPane(container);
    		setLayout(null);
    		
    
    		container.add(canon);
    
    		setVisible(true);
    
    				
    		
    	}
    	
    		
    	
    	
    }
    


    Mais l'image ne s'affiche pas :(

    Merci ^^
    • Partager sur Facebook
    • Partager sur Twitter
      23 août 2009 à 19:22:30

      Je pense que tu devrais mettre ton container.add(canon); juste avant ton setContentPane(container); (j'ai bien dit "je pense" ^^) ...
      • Partager sur Facebook
      • Partager sur Twitter
        23 août 2009 à 19:28:15

        Non GreBG tu penses faux. Le problème que tu rencontre vient de ton setLayout(null); Cela fait que ton container ne sait pas de quelle manière afficher ton canon.

        Soit tu utilises des setBounds sur ton JLabel pour le positionner, soit tu supprimes le setLayout(null);.
        • Partager sur Facebook
        • Partager sur Twitter
          23 août 2009 à 21:46:47

          Euh... il ne faut pas d'abord charger l'image ?
          Parce que créer une ImageIcon avec en paramètre le nom du fichier ça me semble bizarre, j'ai jamais fait comme ça en tout cas, j'ai toujours créer l'ImageIcon à partir d'une objet Image.

          Et aussi, il faut placer le fichier image dans le dossier src sinon ça ne marche pas, moi en tout cas j'ai du faire ça.
          • Partager sur Facebook
          • Partager sur Twitter
            23 août 2009 à 21:57:36

            C'est marrant, parce que ça, ça marche chez moi :

            public class Pbim extends JFrame {
            
            	Pbim() {
            		JLabel canon = new JLabel(new ImageIcon("image.gif"));
            	
            		JPanel container = new JPanel();
            		container.setBackground(Color.BLACK);
            
            		setTitle("Alakazam");
            		setSize(700,600);
            		setResizable(false);
            		setLocationRelativeTo(null);
            		setDefaultCloseOperation(EXIT_ON_CLOSE);
            		setContentPane(container);
            
            		container.add(canon);
            
            		setVisible(true);
            	}
            	
            	public static void main(String[] args) {
            		new Pbim();
            	}
            	
            }
            


            Faut se remettre en question plus souvent les zéros ;)
            En clair, janulrich a raison, vire le setLayout(null) et ça va marcher, bizarrement.
            • Partager sur Facebook
            • Partager sur Twitter
              23 août 2009 à 22:02:07

              Citation : dodvéga

              Tous les 2 faux ^^


              J'avais raison pour le setLayout(null);
              Il suffit de mettre ton image dans le même package que ta classe. Si tu as des problèmes pour la charger essaye avec ce code :
              JLabel canon = new JLabel(new ImageIcon(Main.class.getResource("images.jpg").getFile()));
              

              • Partager sur Facebook
              • Partager sur Twitter
                23 août 2009 à 22:10:02

                Bah chez moi, rien ne marche...
                • Partager sur Facebook
                • Partager sur Twitter
                  23 août 2009 à 22:28:33

                  Bon fait une chose alors. Conaissant que NetBeans je te donne la marche à suivre et si ça fonctionne pas eh ben il faudra jeter ton PC :D =>

                  • Installer et démarrer NetBeans
                  • Créer un nouveau projet Java Application
                  • Copier coller le code ci-dessous dans le main
                  • Presser CTRL + MAJ + I pour les imports
                  • Faire un glisser-déposer d'une image dans le même package que la Main classe
                  • Faire correspondre le nom de l'image
                  • Faire un Clean&Build puis un Play


                  JFrame f = new JFrame();
                  JLabel canon = new JLabel(new ImageIcon(Main.class.getResource("images.jpg").getFile()));
                  JPanel container = new JPanel();
                  container.setBackground(Color.BLACK);
                  f.setTitle("Alakazam");
                  f.setSize(700,600);
                  f.setResizable(false);
                  f.setLocationRelativeTo(null);
                  f.setContentPane(container);
                  container.add(canon);
                  f.setVisible(true);
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 août 2009 à 18:12:40

                    Au fait: ce code ci:

                    JLabel canon = new JLabel(new ImageIcon(Main.class.getResource("images.jpg").getFile()));

                    Me génère ça :
                    Exception in thread "main" java.lang.NullPointerException
                    at Fenetre.<init>(Fenetre.java:16)
                    at ClasseMain.<init>(ClasseMain.java:18)
                    at ClasseMain.main(ClasseMain.java:9)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 août 2009 à 18:17:56

                      Alors c'est normal. Le mot "Main" qu'il y a dans le texte correspond au nom de la classe utilisées dans ton cas je pense que c'est "ClasseMain" ou "Fenetre"...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 août 2009 à 18:19:09

                        J'ai essayé ClasseMain et Fenetre, les deux. Et j'ai obtenu cette erreur.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 août 2009 à 18:35:34

                          Mdrr ton PC est maudis toi. :lol:
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 août 2009 à 18:36:25

                            ^^
                            C'est bien dans le dossier SRC quel 'image se trouve ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 août 2009 à 19:23:06

                              Non dans le même package que la classe dans laquelle tu fais appel au code.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 août 2009 à 19:46:51

                                Si tu n'as pas de package ce sera dans src. Sinon ce sera dans src/package/package2...
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 août 2009 à 20:35:33

                                  Ok, bein ca marche pas lol
                                  Comme disait Lolilolight, maudit est mon PC :(
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 août 2009 à 20:41:59

                                    Le nullpointer veut dire en général qu'un de tes objets n'est pas instancié.

                                    Me souviens plus de tous ca mais as tu essayé de cette maniere ?

                                    ImageIcon icon = createImageIcon("images/middle.gif",
                                    "a pretty but meaningless splat");
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 août 2009 à 20:46:58

                                      Bon montre ton code à quoi il ressemble actuellement et également ta hiérarchie des dossiers et classes et images. Ca va pas être possible de voir d'où vient le problème sinon.

                                      PS : Mais bon si tu suis à la lettre le cheminement que je t'ai donné tu devrais pas pouvoir te planter. Même ma mère y arrive...
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 août 2009 à 20:51:08

                                        Je pense que c'est un problème de contexte graphique, pour pouvoir créer une image il faut que le composant soit affichable à l'écran, pour cela il suffit de faire appel à la méthode isDisplayable sur le composant dans lequel tu veux afficher l'image.

                                        Par exemple dans le dernier code si ton composant n'est pas affichable createimageicon renvoie null.

                                        Pour résoudre le problème suffit de faire appel à setVisible(true) sur le composant avant de créer ton image.
                                        J'ai déjà eu mainte fois ce problème en faisant du double buffering.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          24 août 2009 à 21:06:46

                                          Loli... ca marche pas ^^

                                          Code de...


                                          ClasseMain.java :
                                          public class ClasseMain {
                                          
                                          
                                          	
                                          
                                          	public static void main(String[] args) {
                                          		
                                          		ClasseMain cM = new ClasseMain();
                                          
                                          	}
                                          	
                                          	
                                          	
                                          	ClasseMain()
                                          	{
                                          		
                                          		Fenetre fenetre = new Fenetre();
                                          		
                                          		
                                          	}
                                          	
                                          	
                                          
                                          }
                                          


                                          Fenetre.java :
                                          import java.awt.Color;
                                          
                                          import javax.swing.ImageIcon;
                                          import javax.swing.JFrame;
                                          import javax.swing.JLabel;
                                          import javax.swing.JPanel;
                                          
                                          
                                          public class Fenetre extends JFrame{
                                          
                                          	
                                          	Fenetre()
                                          	{
                                          		
                                          
                                          		JLabel canon = new JLabel(new ImageIcon(("canon.gif")));		
                                          		
                                          		JPanel container = new JPanel();
                                          		container.setBackground(Color.BLACK);
                                          
                                          
                                          		setTitle("Alakazam");
                                          		setSize(700,600);
                                          		setResizable(false);
                                          		setLocationRelativeTo(null);
                                          		setContentPane(container);
                                          		
                                          		container.add(canon);
                                          
                                          		setVisible(true);
                                          
                                          				
                                          		
                                          	}
                                          


                                          Hiréarchie :

                                          Arcade 1
                                          src
                                          default package
                                          ClasseMain.java
                                          Fenetre.java

                                          Bon après, y a le JRE System Library, mais la flemme et pis ca sert à rien ici ^^
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            24 août 2009 à 21:15:52

                                            Non, tu dois :

                                            -Créer ton JLabel, le mettre sur ta fenêtre, rendre ta fenêtre visible et ensuite seulement tu mets ton imageicon sur ton jlabel, t'a essayer ça ?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              24 août 2009 à 21:20:53

                                              Heu comme ceci ? :
                                              JLabel canon = new JLabel();		
                                              		
                                              		JPanel container = new JPanel();
                                              		container.setBackground(Color.BLACK);
                                              
                                              
                                              		setTitle("Alakazam");
                                              		setSize(700,600);
                                              		setResizable(false);
                                              		setLocationRelativeTo(null);
                                              		setContentPane(container);
                                              		
                                              		container.add(canon);
                                              
                                              		setVisible(true);
                                              
                                              				
                                              		canon = new ImageIcon(("canon.gif"));
                                              

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                24 août 2009 à 21:22:00

                                                Et il est où le problème avec ton dernier code ?
                                                Y'a aucune exception, si l'image ne s'affiche pas, c'est qu'elle n'est pas trouvée.
                                                Pour cela, la déplacer de dossier jusqu'à temps que ça marche.

                                                Même les indiens y arrivent, pour reprendre une idée de janulrich...
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  24 août 2009 à 21:22:46

                                                  canon = new ImageIcon(("canon.gif")); lol
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    24 août 2009 à 21:25:49

                                                    Nan mais dodvega, canon est un JLabel, comment veux-tu mettre une ImageIcon dans un JLabel ?????

                                                    Je parlais de ce code-ci :

                                                    import java.awt.Color;
                                                    
                                                    import javax.swing.ImageIcon;
                                                    import javax.swing.JFrame;
                                                    import javax.swing.JLabel;
                                                    import javax.swing.JPanel;
                                                    
                                                    
                                                    public class Fenetre extends JFrame{
                                                    
                                                    	
                                                    	Fenetre()
                                                    	{
                                                    		
                                                    
                                                    		JLabel canon = new JLabel(new ImageIcon(("canon.gif")));		
                                                    		
                                                    		JPanel container = new JPanel();
                                                    		container.setBackground(Color.BLACK);
                                                    
                                                    
                                                    		setTitle("Alakazam");
                                                    		setSize(700,600);
                                                    		setResizable(false);
                                                    		setLocationRelativeTo(null);
                                                    		setContentPane(container);
                                                    		
                                                    		container.add(canon);
                                                    
                                                    		setVisible(true);
                                                    
                                                    				
                                                    		
                                                    	}
                                                    


                                                    Chez moi ça marche très bien, y'a pas de raison que chez toi ça ne marche pas, si tu suis bien ce qu'on dit.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      24 août 2009 à 21:35:53

                                                      Ca veut dire quoi il ne marche pas ? XD
                                                      Comment veux-tu qu'on t'aide avec si peu d'informations ?
                                                      Je te dis qu'il doit marcher, alors s'il ne marche pas chez toi, c'est quoi qui ne va pas ?
                                                      Il se lance ?
                                                      Une fenetre s'ouvre avec un fond noir ou blanc ?
                                                      Le code ne compile pas ?

                                                      Tu utilises Ubuntu avec l'OpenJDK ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        24 août 2009 à 21:37:26

                                                        S'il ne trouve pas l'image il te foutra une exception mais faut tester avec un try catch pitin.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Impossible d'afficher une image

                                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                        • Editeur
                                                        • Markdown