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

avec Java Discussion :

éxecuter une classe qui contient une classe annonyme


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut éxecuter une classe qui contient une classe annonyme
    salut tout le monde
    je débute en java et j ai téléchargé un scripte qui affiche une fenêtre sur laquelle est écrit helloworld
    ca compile sans problemes mais à l'execution ca genere une erreure de type java.lang.NoClassDefFoundError
    j ai essayé avec supprimer la classe annonyme et ca a marché
    maintenant je veux une explication à ca et je veux savoir comment executer cette classe sans avoir à supprimer la runnable
    voici le code source d'origine

    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
     */import javax.swing.*;        
     
    public class HelloWorldSwing {
        /**
         * Create the GUI and show it.  For thread safety,
         * this method should be invoked from the
         * event-dispatching thread.
         */
        private static void createAndShowGUI() {
            //Create and set up the window.
            JFrame frame = new JFrame("HelloWorldSwing");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            //Add the ubiquitous "Hello World" label.
            JLabel label = new JLabel("Hello World");
            frame.getContentPane().add(label);
     
            //Display the window.
            frame.pack();
            frame.setVisible(true);
        }
     
        public static void main(String[] args) {
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }
    merci beaucoup

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    ca ne devrait poser aucun problème, tant que tout tes .class sont là à l'exécution. Les anonymous inner class on la forme <nomDeClass>$1.class.

    La seule raison que je verrait au problème, c'est que tu as déplacé le .class principal sans déplacer ceux des inner classes. On peut voir ton code utilisé pour lancer ton application?

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    salut tout le monde

    oui avec plaisir

    comme tu as dit
    apres compilation il y a eu la creation de deux classes
    HelloWorldSwing$1.class et
    HelloWorldSwing.class

    mon CMD pour lancer le programme est simplement

    etant donné que les deux classes sont sous le repertoire
    C:\Program Files\Java\jdk1.6.0_12\bin

    merci

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    salut tout le monde

    à l'aide ! il y a surement une méthode pour faire ça

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    tu n'as pas d'autres erreurs en amont? Que font tes .class dans le bin de java? Pourquoi tu ne les laisse pas dans le répertoire de ton projet? Le bin de java, c'est pour les binaire java, pas autre chose. Ta classe HelloWorld est-elle dans un package?

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    salut tout le monde

    comme je vous ai dit et comme le montre mon code source l'application n'est pas dans un pack et concernant les classes je les ai mis sous /bin juste pour essayer et faciliter les choses pour ne pas être obligé a modifier le classpath ou utiliser l'option -classpath.
    en fin voici les erreurs que ca genere
    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
     
    java.lang.NoClassDefFoundError: HelloWorldSwing (wrong name: start/HelloWorldSwing)
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    	at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    Could not find the main class: HelloWorldSwing.  Program will exit.
    Exception in thread "main"
    et ceci comme je le pense est a cause de la runnable car quand je l'ai omit tout est bien passé

    merci pour votre patience

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    java.lang.NoClassDefFoundError: HelloWorldSwing (wrong name: start/HelloWorldSwing)
    Tu lance sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java start.HelloWorldSwing
    Alors que HelloWorldSwing n'est pas dans le package "start"


    Pour référence, on a que très rarement besoin de modifier le classpath en java, et on a pas besoin de mettre les class dans le bin/ pour autant. Si ta classe s'appelle HelloWorldSwing.java, qu'elle se trouve dans monProject/src/, t'as juste à lancer les commandes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cd monProject/src
    javac HelloWorldSwing.java
    java HelloWorldSwing

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    bon soir tout le monde

    merci beaucoup pour le hint
    ça a marché j' ai du créer le dossier start et y mettre les deux .class et ceci me pousse a déduire des choses

    1 /si un fichier .java contient une Runnable ( inner class) le compilateur va créer les classes nécessaires et ces classes doivent être placées sous le répertoire start

    2/ un fichier .java qui ne contient pas de inner classes ne fait pas ce ci

    3/ les gurus de java.sun.com qui ont crée ce .java auraient dû mentionner ce ci dans leur tutoriel car ce n 'est pas évident.

    étes vous d'accord ?

    mille et un merci à toi tchize_

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    1 /si un fichier .java contient une Runnable ( inner class) le compilateur va créer les classes nécessaires et ces classes doivent être placées sous le répertoire start

    Absolument faux. Les .class doivent juste être dans les package correspondant à la déclaration "package" dans l'entête du .java. Si t'as besoin que ce soit dans un start, c'est que t'as mis un "package start" en début de ton java. Les inner class, anonyme ou non, sont dans le même package que la outer class.

  10. #10
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    bon soir

    eh oui
    t'as raison j ai bien regardé dans le code source et j ai trouvé
    mais puisque le .java était du .txt au début ;ça n'était pas clair

    merci tchize_ j ai appris des choses

    merci pour ton aide

    arigatooooooooooo !!!!!!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/08/2010, 14h02
  2. Réponses: 3
    Dernier message: 23/06/2009, 09h59
  3. Créer une feuille qui contient une seule page seulement
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/05/2007, 17h38
  4. Récuération d'une variable qui contient une phrase
    Par lama85 dans le forum Langage
    Réponses: 1
    Dernier message: 23/08/2006, 13h52
  5. suppression dans une table qui contient une clé etrangère
    Par zana74 dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 08/08/2006, 10h58

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