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

Collection et Stream Java Discussion :

Probleme d'ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut Probleme d'ArrayList
    Salut !
    j'ai un probleme , je fait un petit Bot IRC en java avec la lic PircBot , tout va bien , mais quand j'essais de diviser le code en plusieurs fichier , comme ceci :
    ici le fichier de mon objet bot :
    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
    import java.io.File;
    import org.jibble.pircbot.*;
    import commands.req;
     
    public class KBot extends PircBot {
     
            public KBot() {
                    this.setName("KRuB0t");
            }
     
            public void onConnect() 
            {
                    sendMessage("NickServ","IDENTIFY ***");
            }
     
            public void onMessage(String channel, String sender, String login,
                            String hostname, String message) {
                            String[] command = message.split(" ");
     
                    if (command[0].equalsIgnoreCase("!req")) {
                            req.execute(channel,sender,login,hostname,command);
                    }
            }
    }
    et ici ma classe req (appeler quand la commande commence par !req donc)
    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
    package commands;
    import java.io.File;
    import org.jibble.pircbot.DccFileTransfer;
     
    public class req {
     
            public static void execute(String channel, String sender, String login,
                            String hostname, String[] command)
            {
                    sendMessage(sender,"Sending you Source File ...");
                    File file = new File("KBot.java");
                    DccFileTransfer t = dccSendFile(file,
                    sender, 120000);
            }
     
    }
    le problem ese situe a sendMesage et dccSendFile , se sont des methodes de l'objet PircBot (hérité par KBot) , je voudrais savoir comment faire pour utiliser ces methodes dans un fichier different de la classe elle meme ?
    comment faire ?
    merci !

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Si ce sont des methodes statique : <nom de classe>.<nom de methode>...
    Si ce sont des methodes d'instance : <nom de variable>.<nom de methode> en supposant que <nom de variable> soit de type <nom de class>...

    Donc soit : KBot.sendMessage() ou PircBot.sendMsesage()...
    Soit il te faut une variable maVariable de type KBot ou PircBot et faire maVariable.sendMessage()...

    Resp avec l'autre nom de methode.
    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

  3. #3
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    j'ai fait comme ca :
    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
    package ircBot.commands;
    import java.io.File;
    import org.jibble.pircbot.DccFileTransfer;
     
    public class req {
     
            public static void execute(KBot k , String channel, String sender, String login,
                            String hostname, String[] command)
            {
                    k.sendMessage(sender,"Sending you Source File ...");
                    File file = new File("KBot.java");
                    k.DccFileTransfer t = dccSendFile(file,
                    sender, 120000);
            }
     
    }
    mais j'ai cette erreur :
    KBot cannot be resolved to a type

  4. #4
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Tu N'aurais pas oublié ton import par hasard?

  5. #5
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    oups en effet , ca marche maintenant , merci

  6. #6
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    Pense au tag Résolu alors

  7. #7
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    pas encore
    j'ai un autre probleme du meme type
    j'ai stocker la liste des fichiers dans un fichier xml , je veut faire le "lecteur xml" dans un fichier different , mais il me trouve une erreur aux {} de la classe ,c'est normal ?

    Syntax error on token "{", { expected after this token

    (je voudrais pouvoir l'utiliser comme ceci : FilesListReader fichiers = new FilesListReader ....)

    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
    package ircBot.commands.req;
    import java.io.File;
    import javax.xml.parsers.*;
    import org.w3c.dom.Document;
     
    public class FilesListReader {
    	try {
    		File files = new File("files.xml");
    		DocumentBuilderFactory factory = DocumentBuilderFactory
    				.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
     
    		Document doc = builder.parse(files);
     
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    }
    (c'est juste le debut de code ca , j'ai pas tout ecrit a cause du probleme qui me casse la tete )

  8. #8
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Ok

    Premierement tes imports sont pas tres bons. Import jamais avec *. Si tu utilises Eclipse tu peux arreter de te casser la tete avec ca en apuyant sur Ctrl-Shift-O

    Mais ton erreur cette fois-ci viens du fais que tu es en train decrire des instructions a l'extérieur d'une méthode. Les instructions doivent etre a lintéreurs d'une méthode (en général)...

    Essaye ca (remarque les imports)
    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
     
    package ircBot.commands.req;
     
    import java.io.File;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
     
    import org.w3c.dom.Document;
     
     
    public class FilesListReader {
     
      public void maMethode() {
        try {
          File files = new File("files.xml");
          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
          DocumentBuilder builder = factory.newDocumentBuilder();
     
          Document doc = builder.parse(files);
     
        }
        catch (Exception e) {
          e.printStackTrace();
        }
      }
    }

  9. #9
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    pourquoi il faut jamais utiliser * ?

  10. #10
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    En utlisant javax.xml.parsers.*;
    Ca te donne acces a toutes les classes et les méthodes statiques du package "javax.xml.parsers". En tulisant * le compilateur prend tout le code contenu dans le package parsers et l'inclus a ton projet!! Imagine le code inutile qui est inclus!

    Toi tu veux utiliser seulement DocumentBuilder et DocumentBuilderFactory. En important seulement les classes que tu veux, tu t'assures de toujours utiliser les objets et méthodes que tu veux.
    Par exemple, tu t'assures de ne pas utiliser des methodes du SAXparser qui est aussi inclus dans le package javax.xml.parsers, mais que tu n'utilises pas dans ton projet. Tu vois que c'est une question de sécurité aussi...

  11. #11
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    Maintenant un probleme sur le XML ...

    voila ma classe pour lire le fichier :
    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
    package ircBot.commands.req;
     
    import java.io.File;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.NodeList;
     
     
    public class FilesListReader {
     
      public void readList() {
        try {
          File files = new File("ircBot/commands/req/files.xml");
          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
          DocumentBuilder builder = factory.newDocumentBuilder();
     
          Document doc = builder.parse(files);
          Element root = doc.getDocumentElement();
          NodeList list = root.getChildNodes();
          for(int i = 0; i < list.getLength(); i++)
          {
        	 NamedNodeMap fichiers = list.item(i).getAttributes();
        	 String filename = fichiers.getNamedItem("name").getNodeValue();
        	 System.out.println(filename);
          }
        }
        catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
    voila mon fichier xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <files>
    	<file id="1" name="req.java" description="Fichier java source"/>
    </files>
    j'ai fait une classe executable pour pas avoir a lancer le bot pour lire le fichier xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package ircBot.commands.req;
     
    public class TestFile {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		FilesListReader files = new FilesListReader();
    		files.readList();
     
    	}
     
    }
    le probleme c'est que j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    java.lang.NullPointerException
    	at ircBot.commands.req.FilesListReader.readList(FilesListReader.java:28)
    	at ircBot.commands.req.TestFile.main(TestFile.java:10)
    d'ou ca peut venir ?:/
    merci

  12. #12
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Ok ton ficher XML est un peu mal formé. XML est super intéressant quand il est bien utilisé

    regarde ca: je te reviens avec du code pour lire ton fichier!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0"?>
    <files>
    	<file>
                <id>1</id>
                <name>req.java</name>
                <description>Fichier java source</description>
            </file>
    	<file>
                <id>2</id>
                <name>req2.java</name>
                <description>Fichier java source2</description>
            </file>
    </files>

  13. #13
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Voici ton try-catch refait rapidement

    Je ne l'ai pas trop testé mais avec la version du fichier XML que je tai envoyé ca devrait etre #1!

    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
        try {
          File files = new File("files.xml");
          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
          DocumentBuilder builder = factory.newDocumentBuilder();
     
          Document doc = builder.parse(files);
          Element root = doc.getDocumentElement();
          NodeList list = root.getElementsByTagName("file");
     
          //Pour tous les fichiers
          for (int i = 0; i < list.getLength(); i++) {
            Element file = (Element) list.item(i);
     
            //Va chercher le ID
            NodeList lId = file.getElementsByTagName("id");
            if(lId.getLength() > 0){
              Element idNode = (Element) lId.item(0);
              NodeList ids = idNode.getChildNodes();
              if (ids.getLength() == 1) {
                String fileId = ids.item(0).toString();
              }
            }
     
            //Va chercher le name
            NodeList lName = file.getElementsByTagName("name");
            if(lName.getLength() > 0){
              Element nameNode = (Element) lName.item(0);
              NodeList names = nameNode.getChildNodes();
              if (names.getLength() == 1) {
                String fileName = names.item(0).toString();
              }
            }
     
            //Va chercher la description
            NodeList lDesc = file.getElementsByTagName("description");
            if(lDesc.getLength() > 0){
              Element descNode = (Element) lDesc.item(0);
              NodeList descs = descNode.getChildNodes();
              if (descs.getLength() == 1) {
                String fileDescription = descs.item(0).toString();
              }
            }
          }
     
        }
        catch (Exception e) {
          e.printStackTrace();
        }

  14. #14
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    merci ca fonctionne
    mais c'est normal que les string renvoyé ai cette forme ?
    [#text: req.java]

  15. #15
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Normalement non,

    Est-ce que tu as bien le meme fichié XML?
    De mon coté ca retourne vraiment "req.java"

    Sinon vérifie que tu as vraiment le meme code que moi...

  16. #16
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    si non comment je peut faire pour acceder au variable (les string que le xml ressort donc) depuis un autre fichier (donc une autre classe ?)
    merci

  17. #17
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Explique-moi un peu ce que tu tentes de faire et je vais te trouver une bonne facon de le faire... J'ai un peu de temps

  18. #18
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    hmm , en faite je pense que je vais pas utiliser le XML pour ca, un simple systeme qui scanne les fichier d'un repertoire sera plus simple a mon avis :p

  19. #19
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Oui Effectivement !

    Fais moi signe si tu as d'autres questions

  20. #20
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par pmartin8
    En utlisant javax.xml.parsers.*;
    Ca te donne acces a toutes les classes et les méthodes statiques du package "javax.xml.parsers". En tulisant * le compilateur prend tout le code contenu dans le package parsers et l'inclus a ton projet!! Imagine le code inutile qui est inclus!
    non, Non, NON ET NON !

    Le import est l'equivalent du using namespace en C++, pas du #include en C/C++ !!!!!

    Il 'sagit d'une racourcit syntaxique destine a la compilation pour la resolution du nom complet d'une classe a partir de son nom court. En utilisant cette directive, IL N'Y A AUCUNE INCLUSION SUPPLEMENTAIRE DE CODE VENANT D'UNE AUTRE CLASSE APRES LA COMPILATION. Juste un remplacement des noms courts par les noms longs dans le code. Java est dynamique, pas statique !

    Dans la majorite des cas un .* est largement suffisant. Il peut exister effectivement des cas ou il faut utiliser le nom de classe seule pour eviter des conflits (perso ca ne m'est jamais arrive mais dans une discussion precedente qqun a indique qu'il avait un conflit dans un SDK de Oracle ou je ne sais plus quoi qui n'etait resolu qu'en specifiant le nom de la classe exacte).

    Apres il y a effectivement des gens qui preferent mettre juste le nom des classes qu'ils utilisent pour des raisons a eux, principalement parcequ'ils pensent qu'une liste d'inclusion de 3Km de long est plus simple a lire (j'imagine qu'ils la trient eux-meme)... et on peut supposer que la compilation doit etre 1~2 ms alors plus rapide (car la resolution du nom court en nom long est plus rapide mais ce ne sont la que des suppositions). Perso je n'utilise que des .*;
    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

Discussions similaires

  1. probleme avec ArrayList
    Par Bigoodheart dans le forum Collection et Stream
    Réponses: 15
    Dernier message: 22/03/2010, 13h30
  2. Probleme affichage arraylist dans jtable
    Par brew94 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 19/12/2008, 13h31
  3. probleme avec ArrayList
    Par guitariste dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 02/05/2008, 23h00
  4. probleme classe arraylist
    Par elfia dans le forum C#
    Réponses: 4
    Dernier message: 07/03/2008, 15h47
  5. Probleme avec ArrayList
    Par AoSiX dans le forum C#
    Réponses: 10
    Dernier message: 30/01/2008, 22h18

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