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

Java Discussion :

Le programme ne se lance pas et il n'y a pas d'erreur


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 27
    Points : 16
    Points
    16
    Par défaut Le programme ne se lance pas et il n'y a pas d'erreur
    Bonjour,

    J'ai fait un petit programme, et quand je le lance j'ai rien qui s'affiche dans la console, même pas une erreur! Je ne sais pas trop pourquoi mais j'ai l'impression qu'il manque un truc dans mon programme mais je ne sais pas quoi! Je débute en java et je patauge un peu parfois ^^

    Classe Livre :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    import java.util.ArrayList;
     
    public class Livre {
    	private String titre;
    	private int nbPage;
        private Auteur unAuteur;
        private ArrayList <Genre> lesGenres ;
     
     
    	//Constructeur	
        Livre(String titre ,int nbPage, Auteur unAuteur) {
    		this.titre = titre ;
    		this.nbPage=  nbPage;
                this.unAuteur= unAuteur;
    lesGenres = new ArrayList<Genre>();
        }
     
     
    	//Accesseurs	
     
    	public  void associerAuteur(String nomA)
    	{Auteur unAuteur;
    		 unAuteur = new Auteur(nomA);
    		}
     
     
    	public  void associerGenre(String nomG)
    		{
    		Genre unGenre;
    		 unGenre = new Genre(nomG);
                 lesGenres.add(unGenre);
     
    		}
     
    //----------------------------------------------------------------------
     
    	public static void main(String[] args) 
    			{
    	//	afficher();		
    			}  
     
    		    public void afficher(Livre L, Auteur A, Genre G)
    		    {
    		        Livre L1 = new Livre ("titre1", 50, null);
    		        Livre L2 = new Livre("titre2", 300, null);
     
    		        Auteur A1 = new Auteur("titi");
    		        Auteur A2 = new Auteur("toto");
     
    		        Genre G1 = new Genre("BD");
    		        Genre G2 = new Genre("Roman");
     
     
     
    		    // afficher le contenu
     
    		        System.out.println("Le livre "+L1+"("+G1+") écrit par "+A1+" a "+nbPage);
    		        System.out.println("-----------------------------");
    		        System.out.println("Le livre "+L2+"("+G2+") écrit par "+A2+" a "+nbPage);
     
     
    	}
     
    }
    Classe Auteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    public class Auteur 
    {
     
    	private String nomA;
     
    	//Constructeur	
        Auteur(String nomA) 
        {
    		this.nomA = nomA ; 
    	}
    }
    Classe Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    public class Auteur 
    {
     
    	private String nomA;
     
    	//Constructeur	
        Auteur(String nomA) 
        {
    		this.nomA = nomA ; 
    	}
    }
    Merci de votre aide!

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Euh, oui. Quand on lance un programme, c'est sa méthode main() qui est appelée.

    Et toi, ta méthode main() ne fait rien. Donc le programme ne fait rien.
    Il faudrait que main() fasse quelque chose.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Ok donc j'ai modifié ça :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    import java.util.ArrayList;
     
    public class Livre {
    	private String titre;
    	private static int nbPage;
        private Auteur unAuteur;
        private ArrayList <Genre> lesGenres ;
     
     
    	//Constructeur	
        Livre(String titre ,int nbPage, Auteur unAuteur) {
    		this.titre = titre ;
    		this.nbPage=  nbPage;
                this.unAuteur= unAuteur;
    lesGenres = new ArrayList<Genre>();
        }
     
     
    	//Accesseurs	
     
    	public  void associerAuteur(String nomA)
    	{Auteur unAuteur;
    		 unAuteur = new Auteur(nomA);
    		}
     
     
    	public  void associerGenre(String nomG)
    		{
    		Genre unGenre;
    		 unGenre = new Genre(nomG);
                 lesGenres.add(unGenre);
     
    		}
     
    //----------------------------------------------------------------------
     
    	public static void main(String[] args) 
    			{
    		afficher();		
    			}  
     
    		    public static void afficher()
    		    {
    		        Livre L1 = new Livre ("titre1", 50, null);
    		        Livre L2 = new Livre("titre2", 300, null);
     
    		        Auteur A1 = new Auteur("titi");
    		        Auteur A2 = new Auteur("toto");
     
    		        Genre G1 = new Genre("BD");
    		        Genre G2 = new Genre("Roman");
     
     
     
    		    // afficher le contenu
     
                            System.out.println("Le livre "+L1+"("+G1+") écrit par "+A1+" a "+nbPage+" pages.");
    		        System.out.println("-----------------------------");
    		        System.out.println("Le livre "+L2+"("+G2+") écrit par "+A2+" a "+nbPage+" pages.");     
     
    	}
     
    }
    Et voila le résultat qui est plutôt étrange (mis a part le fait que ça me sort de l'hexa, le nombre de pages reste le même (j'étais obligé de le mettre en static)) :

    Le livre Livre@7919298d(Genre@62f72617) écrit par Auteur@4fe5e2c3 a 300 pages.
    -----------------------------
    Le livre Livre@7d8a992f(Genre@164f1d0d) écrit par Auteur@23fc4bec a 300 pages.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    quand on affiche des objets, c'est la méthode toString() qui est appelée. Comme tu n'a pas défini tes propres méthodes, le comportement par défaut est d'afficher le nom de l'objet suivi d'un référence.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    j'ai essayé de mettre toString() la ou je pensais que ça pourrait marcher mais ça n'a pas marché ^^

    Tu pourrais m'en dire plus STP?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ce que je veux dire, c'est que si vous voulez afficher autre chose, il faut redéfinir la méthode toString dans les classes que vous avez créées

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Livre {
    	private String titre;
    	private static int nbPage;
        private Auteur unAuteur;
        private ArrayList <Genre> lesGenres ;
        // .... le reste
     
        @override
        public String toString(){
         return "Livre ["+titre+", "+nbPage+" pages]";
        }

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 77
    Points
    77
    Par défaut
    Tes "L1", "G1" etc sont des objets de type "Livre", "Genre" etc

    Ton programme ne sait pas afficher une instance de ces classes. Comme l'a dit tchize_, java par défaut appelle la méthode "toString()" de l'objet que tu cherches à afficher. Dans ton cas, comme tu n'as pas créé de méthode "toString()" spécifique pour ces classes, c'est la méthode "toString()" de la classe "Object" dont tous les objets Java héritent qui est appelé. En l'état, il affiche alors le type de l'objet suivi d'un hash le représentant.

    Donc la question à se poser est : que veut-dire afficher "Livre" ? Est-ce que c'est juste affiché son paramètre "titre", le "titre" et le nom de l'Auteur "unAuter" ?...
    Ensuite soit tu considères qu'afficher un "Livre" ne sera fait que très ponctuellement pour debugger ton programme. Auquel cas il te suffit simplement de remplacer dans ton print "L1" par le paramètre que tu veux effectivement afficher, comme "L1.getTitre()" (la fonction getTitre() doit très certainement être ajouté car tes paramètres sont privés et que tu veux sans doute pouvoir les lire...) par exemple. Soit tu considères que la classe "Livre" mérite une méthode basique d'affichage et alors tu as intérêt à créer sa propre méthode "toString()" du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public String toString(){
       String livreToString = "Titre : " + this.titre + " , de : " + this.unAuteur.toString() + " (pages : " + this.nbPages + ")";
    }
    Même démarche pour Genre, Auteur, etc.


    Ensuite fais attention, ton paramètre "nbPage" est static. Vérifie bien la signification de static.

    De plus tes accesseurs ne sont pas des accesseurs (cad des méthodes qui renvoient le contenu de tes paramètres) mais des mutateurs (cad des méthodes qui modifient tes paramètres). Et par ailleurs ils sont faux : pour "associerAuteur" par exemple, tu crées simplement une variable locale "unAuteur" à ta méthode que tu settes mais à aucun moment ta classe n'est modifiée ! Cette méthode doit être de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public  void associerAuteur(String nomA){
        this.setUnAuteur(new Auteur(nomA));
    }
     
    public void setUnAuteur(Auteur unAuteur){
        this.unAuteur = unAuteur;
    }
    Enfin, l'intérêt de ta classe Auteur me paraît limité : c'est juste une String ! A moins bien sûr qu'il y ait d'autres paramètres (comme une date de naissance, un sexe, ...) ou d'autres méthodes.


    Bon courage

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    J'ai changé certains trucs mais la console n'affiche plus rien quand je lance le programme (pourtant ça mouline quelques secondes)

    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
    54
    55
    56
    57
    58
    import java.util.ArrayList;
     
    public class test {
     
    	public static void main(String[] args) {
     
    	class Livre {
    			private String titre;
    			private int nbPage;
    		    private ArrayList <Genre> lesGenres ;
    			private Auteur unAuteur;
     
     
    			//Constructeur	
    		    Livre(String titre ,int nbPage, Auteur unAuteur) {
    				this.nbPage = nbPage;   //	this.nbPage = nbPage;
    		        lesGenres = new ArrayList<Genre>();
    		    }
     
    		   	//Accesseurs	
    		    public  void associerAuteur(String nomA){
    		        this.setUnAuteur(new Auteur(nomA));
    		    }
     
    		    public void setUnAuteur(Auteur unAuteur){
    		        this.unAuteur = unAuteur;
    		    }
     
     
    			public  void associerGenre(String nomG)
    				{
    				Genre unGenre;
    				 unGenre = new Genre(nomG);
    		             lesGenres.add(unGenre);
    				}
     
    			public void setUnGenre(Auteur unAuteur){
    		        this.lesGenres = lesGenres;
    		    }
     
     
    			Livre L1 = new Livre("titre1", 25, null);
    			Auteur A1 = new Auteur ("auteur1");
    			Genre G1 = new Genre ("Roman");
     
     
     
    		    public String toString(){
    				 String livreToString = "Titre : " + L1.titre + " , de : " + A1 + " pages : " + L1.nbPage + ", genre : "+G1;
    				return livreToString;
    		    }
     
     
    	}
     
     
     
    }}
    Pour les autres classe j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Auteur 
    {
    	private String nomA;
    	//Constructeur	
        Auteur(String nomA) 
        { 
        	this.nomA = nomA;
    	}
     
     
    }
    et la même chose pour "Genre".

  9. #9
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 51
    Points : 71
    Points
    71
    Par défaut
    Normal, tu n'affiches plus rien...

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ton main ne contient rien.

    Ps: même si c'est autorisé, la déclaration des classes n'a pas à être là, met les dans leur propres fichier

  11. #11
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Pour ne pas faire d'erreur, place ton Lanceur dans une classe apart :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Lanceur{
     
    public static void main(String[] args){
     
    Livre livre1 =new Livre(...);
    Livre livre2 = new Livre(...);
     
    System.out.println(livre1); // ou livre1.toString(), c'est pareil
    System.out.println(livre2);
     
    }
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/02/2012, 11h16
  2. Problème de débutant, programme qui ne lance pas
    Par benjani13 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 15/02/2011, 19h17
  3. Réponses: 9
    Dernier message: 17/09/2009, 22h57
  4. Réponses: 3
    Dernier message: 29/06/2008, 03h32
  5. [TP] Programme ne se lance pas depuis l'EDI
    Par papamarco dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 11/03/2006, 13h52

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