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

AWT/Swing Java Discussion :

Problème de construction de frame


Sujet :

AWT/Swing Java

  1. #1
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut Problème de construction de frame
    Bonjour,
    Voila, j'ai un certain niveau (moyen) en java. Je pense être en mesure de créer une frame, mais il s'avère que non
    j'ai codé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import javax.swing.JFrame;
     
    public class MainWindow extends JFrame
    {
    	private static final long serialVersionUID = 1L;
    	private JFrame frame;
    	public MainWindow()
    	{
    		frame = new JFrame();
     
    	}
     
    }
    mais voila que, pour une si petite ligne de code, j'ai une big erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Exception in thread "main" java.lang.UnsupportedClassVersionError: test/Toto : Unsupported major.minor version 51.0
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoader.defineClass(Unknown Source)
    	at java.security.SecureClassLoader.defineClass(Unknown Source)
    	at java.net.URLClassLoader.defineClass(Unknown Source)
    	at java.net.URLClassLoader.access$000(Unknown Source)
    	at java.net.URLClassLoader$1.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    j'ai essayé avec une java 6 et une java 7 en 64 bits (je pense pas que le 64 bits soit un problème sinon ça ce saurait)
    je ne pense pas être un débutant en linux mais là je m'avoue vaincu (fedora 8)

  2. #2
    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
    Simplement la version de java qui était dans ton path n'était pas la bonne, bien que tu aies eu la bonne version d'installée. Enfin pour moi le numéro 51 correspond à java 7.

    Tappes javac -version dans une console, puis java -version et tu verras ou se situe ton problème

  3. #3
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut
    Citation Envoyé par sinok
    $ java -version
    c'est icedtea (1.7.0)
    Citation Envoyé par sinok
    $javac -version
    0.771

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    Ca n'a certe rien à voir avec ta question, et j'ai bien compris que ton code est juste un test. Mais si tu hérites d'une JFrame, je te conseille plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import javax.swing.JFrame;
     
    public class MainWindow extends JFrame
    {
    	private static final long serialVersionUID = 1L;
    	private JFrame frame;
    	public MainWindow() {
    		super();		
    	}	
    }
    Sinon, je ne vois pas l'intérêt de l'héritage (et tu devras redéfinir toutes les méthodes de JFrame !).

  5. #5
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    Citation Envoyé par marchand_de_sable Voir le message
    Ca n'a certe rien à voir avec ta question, et j'ai bien compris que ton code est juste un test. Mais si tu hérites d'une JFrame, je te conseille plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import javax.swing.JFrame;
     
    public class MainWindow extends JFrame
    {
    	private static final long serialVersionUID = 1L;
    	private JFrame frame;
    	public MainWindow() {
    		super();		
    	}	
    }
    je comprends pas pourquoi tu mets un attribut JFrame dans une classe JFrame

    Sinon, je ne vois pas l'intérêt de l'héritage (et tu devras redéfinir toutes les méthodes de JFrame !).
    Non, JFrame n'est pas une classe abstraite (ou une interface)

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    Citation Envoyé par bassim
    je comprends pas pourquoi tu mets un attribut JFrame dans une classe JFrame
    Exact !! J'ai oublié d'enlever la ligne du code de départ (ça m'apprendra à donner des leçons )
    Je reprends donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import javax.swing.JFrame;
     
    public class MainWindow extends JFrame
    {
    	private static final long serialVersionUID = 1L;
    	public MainWindow() {
    		super();		
    	}	
    }
    Citation Envoyé par bassim
    Non, JFrame n'est pas une classe abstraite (ou une interface)
    Certe, mais dans la classe et le constructeur de sliderman, la seule référence faite à la super-classe est le extends. Donc d'après son constructeur, une instance de MainWindow ne sera pas du tout initialisée de la même manière q'une instance de JFrame. Et même si le compilateur ne bronche pas, de mon point de vue, le comportement des méthodes héritées et non redéfinies est plus qu'incertain...

    A moins de redéfinir toutes les méthodes (exemple) :
    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
    import javax.swing.JFrame; 
    public class MainWindow extends JFrame {
    	private static final long serialVersionUID = 1L;
    	private JFrame frame;
     
                 public MainWindow() {
    		frame = new JFrame();		
    	}
     
                 public void setContentPane(Container c) {
                           frame.setContentPane(c);
                }
                public Container getContentPane() {
                           return frame.getContentPane();
                }
                // Etc...	
    }
    Et là, je souhaite bon courage
    Mon raisonnement vous semble erroné ??

  7. #7
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par marchand_de_sable Voir le message
    Mon raisonnement vous semble erroné ??
    Oui.


    Dans la mesure où dans le constructeur de la sous-classe, super() est toujours appelé même si on l'omet.


  8. #8
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    Donc d'après son constructeur, une instance de MainWindow ne sera pas du tout initialisée de la même manière q'une instance de JFrame.
    Si si, le constructeur de la classe mère sera appelé implicitement même si ce n'est pas mentionné (à vérifier, adibuga si tu passes par là ...)

    Edit: grillé

    Et même si le compilateur ne bronche pas, de mon point de vue, le comportement des méthodes héritées et non redéfinies est plus qu'incertain...
    justement, si elles ne sont pas redéfinies , le comportement par défaut de la classe mère va être adopté

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    Ha ben j'ignorais que super() est automatiquement appelé...
    Et effectivement, ça change tout...

    Comment cela se passe-t-il s'il n'existe pas de constructeur sans paramètre dans la super-classe ??

  10. #10
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par marchand_de_sable Voir le message
    Comment cela se passe-t-il s'il n'existe pas de constructeur sans paramètre dans la super-classe ??
    Dans ce cas il faudra préciser avec super le constructeur de la super-classe à appeler (en passant les bons paramètres) sinon il y aura une erreur de compilation.

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    OK.

    Je retire donc ce que j'ai dit...
    Désolé sliderman d'avoir pollué ton post

    Une question subsiste toutefois : quel intérêt de l'attribut JFrame dans ta JFrame ??

Discussions similaires

  1. [Access] Problème de construction de requête
    Par feasil dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/04/2006, 11h59
  2. Problème de construction de requête !
    Par feasil dans le forum Access
    Réponses: 1
    Dernier message: 12/04/2006, 20h02
  3. Problème de construction d'une classe
    Par AraBorLeg dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2005, 19h07
  4. Problème d'affichage: fenêtres (frames) vides!
    Par NdmaX dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 12/07/2005, 21h23
  5. Problème de construction avec la STL
    Par gelam dans le forum SL & STL
    Réponses: 19
    Dernier message: 01/05/2005, 12h41

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