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

Concurrence et multi-thread Java Discussion :

Exception in thread "main" java.lang.ArrayIndexOut


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre du Club Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 67
    Points
    67
    Par défaut Exception in thread "main" java.lang.ArrayIndexOut
    Bonjour,

    Je débute en Java et j'ai un petit souci avec un message d'erreur

    J'ai le message suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
           at Classique.main(Classique.java:28)
    quand je lance le programme suivant :

    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
    class Classique
    {	
      private String nom;
      private int nbRepetitions;
      String message = "travaillons";
     
      Classique(String nom, int nbRepetitions)
      {
        this.nom = nom;
        this.nbRepetitions = nbRepetitions;
      }
     
      void repete()
        {
          for (int i = 0;i < nbRepetitions; i++)
    	{
    	  System.out.println(message);
    	}
        }
     
      public String toString()
        {
          return nom + " dit : " + message;
        }
     
      public static void main(String[] argv)
      {
        int repetition = Integer.parseInt(argv[0]);
     
        Classique ecrivain = new Classique("Jean", repetition);
     
        ecrivain.repete();
        ecrivain.message="reposons-nous";
        System.out.println(ecrivain);
      }
    }
    J'utilise SDK 1.5.0_05

    Merci de votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    suppose que tu a entré au moins un parametre lors de l'execution du programme sinon la taille du tableau est de 0 et donc il n'y effectivement pas d'element en 0.

    J'ai pas compté les lignes pour voir si cela venait de la mais cela pourrait en etre une raison. (Selon l'erreur, c'est la ligne 28 )


    Et petite remarque de "style", remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      String message = "travaillons";
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private String message = "travaillons";
    // fonction qui parait inutile mais créant une possibilitée de controle
    // et permet une meilleure "encapsulation", on peut interagir avec l'objet
    // sans connaitre sa "gestion memoire"
    public void setMessage(String newMessage){
              message = newMessage;
    }

  3. #3
    Membre du Club Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    Non je n'ai pas entré de paramètre

    Le programme se lance dans une Invite de commande MSDOS et affiche tout de suite le message d'erreur, sans que je n'ai eu le temps de saisir quoique ce soit.

    La ligne suivante me demande d'appuyer sur une touche pour continuer...

    J'ai essayé, dans

    d'enlever le "0", mais cette fois, j'ai des erreurs lors de la compilation.

    J'ai vu sur le site où j'ai piqué ce code, qu'il était possible de passer outre l'exception par le biais de TRY et CATCH

    J'aimerais savoir si cette méthode à une incidence sur le déroulement du programme ?

    Merci

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Remets ton argv[0]. Quand TabrisLeFol parle de paramètre, il parle d'argument à mettre dans la ligne de commande d'appel du programme Java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java MaClasse parametre1 parametre2
    Dans ce cas, argv[0] vaut parametre1, argv[1] vaut parametre2, etc. Du coup, de ton erreur, tu déduis une bonne pratique : toujours vérifier le nombre de paramètres/arguments (argv.length) passés à ton programme avant de faire quoi que ce soit, éventuellement pour afficher une aide.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Points : 174
    Points
    174
    Par défaut
    Lorsqu'on attend des parametres lors de l'appel du programme, il est bon de faire un test pour savoir si tous les parametres que lon attend sont bien la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static void main(int argv, String[] args) {
       if(argv < 1) // on attend au moins 1 parametre
       {
         System.out.println("monProgramme param1");
         System.exit(1);
       }
    }
    The path of excess
    leads to the tower of wisdom.
    (Enigma)

  6. #6
    Membre du Club Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    Bonsoir,

    OK !!! je viens de comprendre qu'en fait vous exécutiez les programmes par le biais de la commande java.
    Moi j'utilise une IDE (JCreator) pour cela

    Questions :

    1/ est il possible de passer des paramètres quand on exécute un programme avec une IDE ?
    Si oui, comment ?

    2/ Par ailleurs, j'ai essayé de compiler et d'exécuter avec les commandes javac et java - résultat :

    Alors, n'écoutant que mon courage, je me suis connecté ADSL !
    J'ai cherché de la doc sur javac et java - résultat, il est 1h00 du mat et je rame toujours !!!

    Donc, voici les répertoires que j'utilise et la commande que j'ai entrée :

    Emplacement de mon JDK
    c:/Java/jdk1.5.0_05
    quand je fais un java -version, il s'agit bien de la bonne version

    Mes fichiers .java et .class se trouvent :
    c:/Program Files/Xinox Software/JCreatorV3 LE/MyProjects/Mon projet

    La commande entrée :
    java -classpath c:/Program Files/Xinox Software/JCreatorV3 LE/MyProjects/Mon projet/mon_fichier

    Il me semble avoir lu quelque part qu'il fallait éviter les espaces dans la commande, et d'ailleurs, l'erreur
    Exception in thread "main" java.class.NoClassDefFoundError: Files/Xinox
    tant à aller dans ce sens (ou me trompe-je ?)

    Voilà donc pour les réflexions du jour.

    ++

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    1/ est il possible de passer des paramètres quand on exécute un programme avec une IDE ?
    Oui bien sur regardes les proprietes de ton projet et plus specifiquement les proprietes concernant la classe a executer lors du lancement. Tu peux specifier des parametres pour la JVM et pour ton programme.

    2/
    Quand tu as des espaces dans un nom de chemin il te faut mettre des " (double-quote) autour de ce chemin genre "c:/Program Files/Xinox Software/JCreatorV3 LE/MyProjects/Mon projet/". De plus pour le classpath tu inclues en general des repertoires (contenant des class ou des arborescence de package) et/ou des fichiers JAR, pas des fichiers class.
    Si tu es deja dans le bon repertoire (a la racine de l'arborescence des packages) juste un . suffit.

    Ensuite la commande d'execution est :

    java [<parametre de la JVM 1> <parametre de la JVM 2> ...] -cp . <liste des packages separes par des points>.<classe publique contenant le main()> [<parametre du programme 1> <parametre du programme 2> ...]

    Note : -cp est l'equivalent de -classpath, uniquement pour la commande java (-cp n'existe pas pour javac) et c'est juste plus court a taper.

    Genre (en supposant que dans le repertoire courant il y ait un sous-rep test contenant le fichier class approprie et que MaClasseDeTestDAffichageEnModeConsole fasse bien partie du package test) :

    java -cp . test.MaClasseDeTestDAffichageEnModeConsole "Salut tout le monde"
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException ?
    Par freezerhm dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 04/12/2007, 09h26
  2. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    Par Trint dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 27/02/2007, 11h28
  3. Réponses: 8
    Dernier message: 11/05/2006, 19h32
  4. [JDIC]Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    Par kedare dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 06/05/2006, 22h45

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