Problème objetj ava
Comment je pourrais faire svp?
Configuration: Windows Vista Firefox 3.5.4
30 réponses
La problématique centrale est d'accéder à une classe ou un objet Java défini dans un fichier depuis d'autres fichiers sans visibilité ou import correct, lorsque l'objet n'est pas reconnu. Plusieurs réponses insistent sur de déclarer la classe publique et de placer chaque classe dans son propre fichier, avec un nom correspondant, et d'utiliser l'importation lorsque les paquets diffèrent. D'autres conseils soulignent l'importance d'instancier correctement les objets et de déclarer les types avant de les manipuler, ainsi que l'utilisation de constructeurs pour transmettre des références. En cas de paquetage, l'import doit cibler le bon espace de noms et les fichiers doivent correspondre au chemin et au nom de classe; il peut aussi être nécessaire de passer l'objet via des paramètres.
-
Très bien,
Bon Courage avec le reste, j'espère que tu arrivera à le terminer à temps.
Bon Courage. -
Ca fonctionne, merci. :)
-
Normalement c'est bon,
Tu avais un petit problème d'initialisation et c'est tout.
J'ai créé ma propre PopClient, il suffit de la remplacer. -
Oui un TP à rendre pour demain normalement. :/
Je préfère t'envoyer les 3 classes, tu comprendras mieux. :)
Donc je t'envoie mes class Menu.java, Dele.java et Interface.java par mail. -
Tu as une erreur ici:
Dele fenetreDele = new Dele(new PopClient(String host, int port));
cela est une déclaration, mais tu veux appeler la méthode elle même, ça doit être per exemple:Dele fenetreDele = new Dele(new PopClient("localhot", 80));
Si tu es pressé (tu m'a dit que c'est un TP) peut être tu peut m'envoyer les trois classes juste pour compilation, sinon, je peux t'envoyer un code qui montre ces techniques, mon mail est: tarek_ini@yahoo.fr -
Ca me met encore des erreurs, j'ai l'impression que je ne vais jamais réussir ce truc.. :(
mon code:dele.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Dele fenetreDele = new Dele(new PopClient()); } });
J'ai l'erreur comme quoi le constructeur PopClient() n'est pas défini, donc après j'ai fais de cette façon:dele.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Dele fenetreDele = new Dele(new PopClient(String host, int port)); } });
J'ai l'erreur:
https://www.casimages.com/i/091103013339771319.png.html -
Désolé, je me suis déconnecté hier,
Pas de valeurs, Oui, mais l'objet doit exister.
Bon pour .quit() je oense que tu peux la mettre comme static (dans ce cas tu appelle via PopClient.quit())
Mais pour rset(), l'objet doit exister.
Une des solutions possible est de faire passernew PopClient()
au lieu denull
Alors, même si les valeurs ou l'objet n'est plus importants, il est possible d'appeler tes méthodes. -
Y a aussi le fait que quand je créé mon objet PopClient pop, j'appelle ma fenêtre Menu.java, dans ma fenêtre Menu.java, je peux aussi utiliser la méthode quit(); qui quitte donc ou rset(); qui réinitialise les messages, en fait j'utilise la rfc 1939(http://abcdrfc.free.fr/rfc-vf/rfc1939.html et toutes mes méthodes proviennent de là et donc pour ces deux méthodes, il n'y a pas besoin de valeur, on les appelles et ça s'exécute..
Voici comment je l'utilise:rset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { pop.rset(); } }); -
Si tu dois récupérer une valeur ou effectuer un pop.dele(quelque chose), c'est parce que tu as besoin ou tu traite un cas précis, alors il suffit juste de donner le bon élément, et si tu n'as pas de traitement, pourquoi fait-on le pop.dele()?
Il faut revoir le scénario d'exécution que tu as mis pour ton utilisateur. -
Donc je dois mettre une valeur non null mais je ne comprends pas trop quoi mettre valeur.. :/
Sinon oui, je vais pas tarder à me coucher mais j'aime bien programmer aussi malgré mon niveau. :) -
Je pense que tu es assez fatigué, tu n'as pas bien dormis et bien se reposé depuis hier mon pote.
le NullPointerException est parceque tu as utiliser null comme paramètre puis tu as fait des appels genre: pop.dele(15), mais oui, dans ce cas pop est null et l'erreur est générée.
Je te conseil de garder le paramètre partout dans une valeur NON NULL pour éviter cette erreur -
J'ai des erreurs partout de type NullPointerException quand j'appelle j'utilise mon PopClient pop.. :/
Ca ne doit pas être la bonne méthode.. :(
Faut que ça fonctionne sinon je vais avoir une mauvaise note alors que j'y aurait passer du temps.. :/
Voilà ce que j'ai comme erreur et ce qui est bleuté est la ligne qui correspond, soi la 140 dans le message d'erreur alors que j'ai bien mis un attribut PopClient pop dans la classe..
https://www.casimages.com/i/091103124025481659.png.html -
Si le passage est bien fait, et que l'appel du pop.dele(15) (pas int nombre) est fait dans le cas où tu passe un paramètre NON null, et beh pourquoi pas marcher?
De toute façon, si ça pause d'autre problèmes, met les dans cette discussion pour que nous puissions suivre. -
J'ai préféré faire un Dele fenetreDele = new Dele(null);.
Donc maintenant, ça fonctionne sans problème? ^^
Si je fais des par exemple un pop.dele(int nombre) quelque part, ca fonctionne? -
AAAhhh, Oui, Dele() est par défaut, mais que tu spécifies un paramètres, il ne sera pas possible d'appeler Dele(), pour cela il y a deux solutions:
1. Remplacer new Dele() par new Dele(null)
2. Créer un nouveau constructeur: Dele() sans paramètre, et avec le même code sauf que pour pop = pop; elle devient pop = null; ou même ignorée -
Je l'ai fais, j'ai aussi déclaré un attributs de type PopClient donc mon code donne ça:
public class Dele{ //Déclaration d'un attribut PopClient pop; //Constructeur public Dele(PopClient pop){ ... } }
Le problème qu'il me reste est que quand je veux créer un objet de type Dele() donc en faisant Dele fenetreDele = new Dele();, j'ai un message qui me dit que mon constructeur Dele() est indéfini, j'ai donc essayé en rajoutant PopClient pop en paramètre et voici ce que ça me donne:
http://nsa10.casimages.com/img/2009/11/02//091102121649797342.png -
La déclaration du paramètre dans le "constructeur" pas dans la classe, par exemple:
public class MaClasse { // voici le constructeur public MaClasse(parametretype parametre) { } } -
J'ai cherché sur internet comment faire une variable attribut et j'ai remarquer qu'il fallait faire tout faire private static PopClient pop; à chaque fois?
Je l'ai donc fait partout sauf pour l'instanciation où j'ai fais static PopClient pop = new PopClient(host, port);..
Par contre, ça me met des erreurs partout maintenant comme j'ai fais public class Dele(PopClient pop) extends JFrame implements ActionListener{
.......
}
Voilà l'erreur que ça me met:
https://www.casimages.com/i/091101034209316369.png.html -
La solution est simple:
Tu dois passer "pop" comme paramètre de constructeur:
public Dele(PopClient pop){ nombreMessage = pop.listeMessage(); }
et cela avant la destruction de l'objet Interface qui a créé ton "pop"
Si il faut passer par plusieurs fenêtres: tu peux le passer comme paramètre comme le nombre de fois que vous voulez, mais il faut donc créer une variable (attribut) PopClient dans chaque classe. -
Mon déroulement de mes évènements est que j'appelle Interface.java à partir de mon fichier principal qui s'appelle "ManagerPopClientGUI.java", donc l'interface se créé et ensuite je rentre tout mes logs et une fois qu'ils sont bien tous entré, je créé pop en faisant PopClient pop = new PopClient(); dans mon fichier Interface.java et j'appelle une nouvelle fenêtre dans mon fichier Menu.java.
Dans cette nouvelle fenêtre, j'ai donc un menu qui va me permettre de soit ouvrir un des messages de mon PopClient, soit d'en supprimer ou encore d'autres possibilités..
Donc si par exemple, je veux effacer un des messages, je fais appelle à une troisième fenêtre où je choisis quel message je veux supprimer et après (là où est mon problème), je voudrais bidouiller mon pop mais j'ai le problème qu'apparemment il n'est pas déclaré..
Voilà ce que j'ai:
https://www.casimages.com/i/091101023525768775.png.html
J'ai déclaré nombreMessage en int puisque la méthode listMessage(); retourne le nombre de message que contient le PopClient..
J'ai peut-être oublier de dire que l'on se connecte à un fichier executable "pop3ServerTest" où sont stocké tout les messages..
- 1
- 2