Problème objetj ava

Absot Messages postés 819 Statut Membre -  
tarek_dotzero Messages postés 834 Statut Membre -
Bonjour, j'ai créer mon objet dans mon projet en java dans un ficher et j'aurais aimé le manipuler à travers d'autres fichiers mais ça me dit que mon objet n'est pas défini..

Comment je pourrais faire svp?
A voir également:
  • Problème objetj ava
  • Ava find - Télécharger - Divers Utilitaires

30 réponses

Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
avec import NomDeTaClasse

Il faut que le fichier java NomDeTaClasse.java soit dans le même répertoire, où alors tu précises le chemin d'accès dans les options de ton éditeur/compilateur.
0
Absot Messages postés 819 Statut Membre 44
 
Je viens de faire un "import PopClient;" et "import PopClient.java;" tout en haut de mon fichier mais ça ne fonctionne pas..

Il faut faire un import de la classe de l'objet ou de la classe dans laquelle je créé l'objet parce que je l'ai créé dans un fichier qui s'appelle Interface.java?
0
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
tu dois importer la classe de l'objet. Et il y a probablement dans ta classe que tu importes d'autres classes qui sont nécessaires, mais ça ça concerne les import de ta classe, tu n'as pas à t'en soucier normalement.

Qu'est ce qui ne marche pas au fait, précisément ? (message d'erreur)
0
tarek_dotzero Messages postés 834 Statut Membre 122
 
Il ne sera pas donc accessible:

1. S'il est dans le répertoire courant, il ne faut pas mettre import, cela ne sert à rien, à condition qu'il soit "public class" c'est à dire le nom de la classe est le même nom du fichier.

2. Si tu l'a défini dans une autre classe, par exemple "Interface.java" comme suit

public class Interface
{
}

class PopClient
{
}



PopClient ne sera pas accessible que par la classe Interface, donc il faut le mettre séparément.
C'est simple: crée un fichier PopClient.java et y copie le code de ta classe, mais attention il faut supprimer la déclaration du premier objet de la classe interface, sinon cette dernière aura des problème à distinguer entre les deux (fichier séparé et objet inclue)
0
Absot Messages postés 819 Statut Membre 44
 
J'ai tapé "import PopClient.java" et voici le message:
https://www.casimages.com/i/091031061601989598.jpg.html]

Comment on fait pour directement mettre l'image?
0
tarek_dotzero Messages postés 834 Statut Membre 122
 
De cette manière, le compilateur va comprendre qu'il doit cherche la classe java dans le repertoire PopClient.
0
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
oups je vois. Alors toutes mes excuses je t'ai dit une bêtise :(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Absot Messages postés 819 Statut Membre 44
 
Donc je dois faire comme la méthode que tu cites plus haut tarek_dotzero?
0
tarek_dotzero Messages postés 834 Statut Membre 122
 
Essaie, cela doit marcher.
Dit bous qu'est ce que tu trouve, sinon, met le code et le message d'erreur (juste la déclaration des classes).
0
Absot Messages postés 819 Statut Membre 44
 
Je ne peux pas créer un fichier PopClient.java comme il existe déjà donc je mets un autre nom?

Ensuite je copie le code de Interface.java en enlevant l'instanciation, c'est tout?

Et après je fais quoi?

Je suis un peu nul..
0
arth Messages postés 10414 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
Un peu nul qui code ce qui semble être un client de messagerie? A moins de vouloir se foutre de nous ...

Bon reprenons ...

Déjà tous tes fichiers se trouve au même niveau dans l'arborescence Eclipse, donc l' "import" ne sert à rien.

En revanche en regardant la déclaration de "private int nombreMessage", tu fais direct "=pop.".

STOP !

En java ou autre langage tu ne peux pas utiliser une variable que tu n'as pas instancié, puisque tu écris "pop." alors que tu n'as même pas défini précédemment de quel type est pop. Un Entier? Une String?

Ensuite pour ton import, il est normal que ça ne passe pas. En effet tu as mis tes classes dans un package nommé "app"'. Même si c'est inutile, tu peux faire l'import via "import app.PopClient;" et roulé jeunesse.

Mais ton problème vient du fait que tu n'as pas déclaré de quel type est ta variable "pop".

Loulou.
0
Absot Messages postés 819 Statut Membre 44
 
"Un peu nul qui code ce qui semble être un client de messagerie? A moins de vouloir se foutre de nous ... "

Je ne comprends pas trop, je suis étudiant et ce que je fais est une activité de cours..

Mon pop est déjà déclaré dans un Interface.java en tant que PopClient mais quand je fais un "import app.PopClient;", pop n'est toujours pas déclaré alors que si mais je voudrais juste le réutiliser pour continuer à le manipuler.. ?
0
tarek_dotzero Messages postés 834 Statut Membre 122
 
Je n'arrive plus à suivre, maintenant c'est un problème de déclaration?

Je vais essayer de donner un expemple plus complet:

3 fichiers:
1. PopClient.java

public class PopClient{
}


2. Interface.java

public class Interface{
      public PopClient pop;

      public Interface()
      {
             pop = new PopClient();
      }
}



3. L'appelant: Min.java


public class Main{
     public static void main(String args[])
     {
           Interface interface = new Interface();

           // Voilà une manipulation possible:
           PopClient popLocal = interface.pop;

     } 
}



il suffit de mettre les fichiers dans le même répertoire et de compiler Main.java

Est ce que c'est ça ce que tu cherches?
0
Absot Messages postés 819 Statut Membre 44
 
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..
0
tarek_dotzero Messages postés 834 Statut Membre 122
 
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.
0
Absot Messages postés 819 Statut Membre 44
 
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
0
tarek_dotzero Messages postés 834 Statut Membre 122
 
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)
             {
             }

}

0
Absot Messages postés 819 Statut Membre 44
 
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
0
tarek_dotzero Messages postés 834 Statut Membre 122
 
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
0
Absot Messages postés 819 Statut Membre 44
 
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?
0
tarek_dotzero Messages postés 834 Statut Membre 122
 
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.
0
Absot Messages postés 819 Statut Membre 44
 
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
0
tarek_dotzero Messages postés 834 Statut Membre 122
 
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
0