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

Interfaces Graphiques en Java Discussion :

erreur arriere plan


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut erreur arriere plan
    bonjour,
    avec ce code:
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import java.awt.Graphics;
    import java.awt.Toolkit;
    import java.awt.Image;
     
    public class NewJFrame extends javax.swing.JFrame {
     
        /** Creates new form NewJFrame */
        public NewJFrame() {        
            initComponents();        
            Toolkit kit = Toolkit.getDefaultToolkit();
            Image icone = kit.getImage("/background.jpg");
            g.drawImage(icone ,0, 0,this.getSize().width ,this.getSize().height, null);
        }
     
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 676, Short.MAX_VALUE)
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 475, Short.MAX_VALUE)
            );
     
            pack();
        }// </editor-fold>
     
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new NewJFrame().setVisible(true);
                }
            });
        }
     
        // Variables declaration - do not modify
        // End of variables declaration
    Graphics g;    
    }
    j'ai une erreur au niveau de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.drawImage(icone ,0, 0,this.getSize().width ,this.getSize().height, null);
    Citation Envoyé par erreur
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    quelcun saurait-il d'ou ca vient?
    merci

  2. #2
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    A quel moment dans ton code définis-tu la taille de ta fenêtre ?

    Ie, il faut que tu donnes des dimensions à ta fenêtre pour ensuite utiliser ses dimensions pour définir la taille de ton image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setPreferredSize(new Dimension(400,400));
    Pour optimiser la taille de la fenêtre tu peux récupérer la taille de l'écran.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
    setPreferredSize(new Dimension(screen.getWidth(),screen.getHeight()));
    Il y a aussi cette ligne peut être qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Image icone = kit.getImage("/background.jpg");
    //essaie ceci au cas où
    Image icone = kit.getImage("./background.jpg");

  3. #3
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    A quel moment dans ton code définis-tu la taille de ta fenêtre ?
    la taille est definie dans un fichier externe "NewJFrame.form":
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8" ?>
    
    <Form version="1.3" maxVersion="1.5" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
      <Properties>
        <Property name="defaultCloseOperation" type="int" value="3"/>
      </Properties>
      <SyntheticProperties>
        <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
      </SyntheticProperties>
      <AuxValues>
        <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
        <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
        <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
        <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
      </AuxValues>
    
      <Layout>
        <DimensionLayout dim="0">
          <Group type="103" groupAlignment="0" attributes="0">
              <EmptySpace min="0" pref="676" max="32767" attributes="0"/>
          </Group>
        </DimensionLayout>
        <DimensionLayout dim="1">
          <Group type="103" groupAlignment="0" attributes="0">
              <EmptySpace min="0" pref="475" max="32767" attributes="0"/>
          </Group>
        </DimensionLayout>
      </Layout>
    </Form>
    en fait, il s'ajit de code generé automatiquement par un IDE.
    ce que j'ai ajouté moi meme c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Toolkit kit = Toolkit.getDefaultToolkit();
            Image icone = kit.getImage("/background.jpg");
            g.drawImage(icone ,0, 0,this.getSize().width ,this.getSize().height, null);
    //essaie ceci au cas où
    Image icone = kit.getImage("./background.jpg");
    ca na rien changé.

  4. #4
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Essaie ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g.drawImage(icone ,0, 0,this.getSize().width ,this.getSize().height, this);

  5. #5
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    IDEM.

  6. #6
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Et si tu affiches la hauteur et la largeur de la fenêtre dans ta console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    System.out.println(""+this.getSize().width);
    System.out.println(""+this.getSize().height);
    Quelles valeurs récupères-tu ?

  7. #7
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    run:
    684
    507

  8. #8
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    quand je passe drawImage en commentaire, le programme se compile. c'est bien la preuve que l'erreur reside dans cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public NewJFrame() {        
            initComponents();        
            Toolkit kit = Toolkit.getDefaultToolkit();
            Image icone = kit.getImage("./background.jpg");
            System.out.println(""+this.getSize().width);
            System.out.println(""+this.getSize().height);
            //g.drawImage(icone ,0, 0,400 ,400, this);
        }

  9. #9
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    Re,
    à relire le message d'erreur:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    ça m'a rappelé certaines erreurs dues à l'absences d'un try catch. j'ai donc fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public NewJFrame() {        
            initComponents();        
            Toolkit kit = Toolkit.getDefaultToolkit();
            Image icone = kit.getImage("/background.jpg");
            System.out.println(""+this.getSize().width);
            System.out.println(""+this.getSize().height);
            try{
                g.drawImage(icone ,0, 0,400 ,400, this);
            }catch(NullPointerException e){
                }
        }
    et là plus d'erreur de compilation (un probleme de resolu). Cependant, la frame se lance mais pas d'arriere plan dans le jPanel.
    IDEM pour "./background.jpg"
    que faire?

  10. #10
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    try{
                g.drawImage(icone ,0, 0,400 ,400, this);
            }catch(NullPointerException e){
                }
    et là plus d'erreur de compilation
    Quelquepart c'est normal puisque tu ne traites pas le NullPointerException

    mais pas d'arriere plan dans le jPanel
    Je ne vois de JPanel dans ton code, tu travailles apparemment sur le layout de ta JFrame.

    Revenons-en à ton souci. Je pense que ton souci vient de ton objet g.

  11. #11
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    J'ai trouvé ce code, merci à ioan

    Il fonctionne essaie de voir si tu peux l'adapter à ton code :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.MediaTracker;
    import java.awt.Toolkit;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class Main extends JFrame
    {
    	private Image fond;
    	public Main()
    	{
    		super("Test");
    		fond = Toolkit.getDefaultToolkit().getImage("./background.jpg");
    		try
    		{
    			MediaTracker mt = new MediaTracker(this);
    			mt.addImage(fond,0);
    			mt.waitForAll();
    		}
    		catch(Exception e){e.printStackTrace();}
    		setContentPane(new ContentPane(fond));
    		getContentPane().add(new JLabel("Bonjour"));
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setSize(400,400);
    		setLocationRelativeTo(null);setVisible(true);
    	}
     
    	private class ContentPane extends JPanel
    	{
    		private Image image;
    		public ContentPane(Image leFond)
    		{
    			super();
    			image=leFond;
    		}
    		public void paintComponent(Graphics g)
    		{
    			g.drawImage(image,0,0,null);
    		}
    	}
    	public static void main(String[] args)
    	{
    		new Main();
    	}
    }

  12. #12
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    resolu de cette facon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        public Icon getBackGround() {
            return this.backgroundic;
        }
     
        public void setBackGround(Icon backgroundic) {
            this.backgroundic=backgroundic;
            backgroundim=((ImageIcon)backgroundic).getImage();
        }
     
        public void paintComponent(Graphics g)
        {
        g.drawImage(backgroundim,0,0,this.getSize().width,this.getSize().height,null);
        }
    merci pour l'exemple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [web] Lancer un script en arrière plan
    Par gracouille dans le forum Web
    Réponses: 4
    Dernier message: 27/05/2004, 17h37
  2. Installer Interbase en arriere plan depuis delphi
    Par nanaalain dans le forum Bases de données
    Réponses: 9
    Dernier message: 24/11/2003, 15h18
  3. programme en arriere plan
    Par tgx874sah dans le forum Réseau
    Réponses: 4
    Dernier message: 21/11/2003, 14h06
  4. [MFC]arriere plan pour un objet de la classe CStatic
    Par gabriel knight dans le forum MFC
    Réponses: 13
    Dernier message: 28/07/2003, 11h42
  5. j'arrive pas a arreter mon thread d'arriere-plan
    Par ms91fr dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2003, 22h36

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