Bonjour,
J'ai une ArrayList de type Contact.
Contact est aussi une ArrayList mais de type String (nom,adresse,...).
Je voudrais afficher une JList avec ma liste de Contact en utilisant une ListModel.
J'ai crée une:
class MyListModel implements ListModel
{
private MyListModel listeContact;
public MyListModel(ArrayList contactArray)
{
listeContact = new MyListModel();
}
void addElement(Contact contact)
{
listeContact.addElement(contact);
}
public Contact getElementAt(int index)
{
return listeContact.getElementAt(index);
}
...
}
Lorsque j'essaye de tester la construction,l'ajout et l'acces à un element:
je déclare dans un Junit test:
MyListModel contacts = new MyListModel(a.cont);
//a.cont renvoi L'arrayList de type Contact
et déja Eclipse me remonte un "java.lang.StackFlowError"
avec de noimbreuses erreurs qui m'ammène au niveau de mon constructeur de
listeContact dans la classe MyListModel.
En ne forcant pas le typage de MyListModel j'arrive je crois a atteindre l'adresse de mes objets Contact. Cependant je n'arrive pas à atteindre les
String (nom,adresse,...) et Eclipse me remonte une erreur disant que Object et Contact ne sont pas du meme type...
J'ai tenté bcp de choses..mais la c'est l'impasse,
et je dois finir d'implémenter mon client dans peu de temps...
Ca n'a peut-être rien à voir avec ton problème, mais pourquoi passer "contactArray" au constructeur si tu ne t'en sert pas ?
Qu'est-ce que Eclipse a à voir là-dedans ?
Ca n'existe pas. Ce qui existe est java.lang.StackOverflowError. Ce qui est en général le signe d'une fonction récursive qui ne termine pas.
Comme il n'y a rien de récursif dans le code que tu montres, le problème se situe dans doute ailleurs.
Il n'y a rien dans ce constructeur (tel que tu le montres). Même, comme le fait remarquer jrebillat, tu n'utilises même pas l'argument qu'il reçoit. Ou alors c'est que tu as voulu simplifier ton code avant de le poster, mais là il est trop simplifié :)
forçant :?: qu'est-ce à dire ?
Et puis de quoi parlons nous là ? Le typage de MyListModel, c'est MyListModel et ListModel. Il n'y a rien à forcer la dedans.
Qu'est-ce à dire ? On atteint l'adresse des objets en Java de nos jours ? Tu m'apprends quelque chose.
Qu'est-ce que Eclipse a à voir là dedans ?
Bon donc là tu as déclaré une liste d'Object au lieu de Contact si je comprends bien. Donc le compilateur n'est pas content. Si tu as mis quand même des Contact dans ta liste, tu peux transtyper quand tu les récupères.
Cela dit, quel rapport avec le StackOverflow ? Il y a quelque chos eque tu ne nous dit pas, et c'est dans ce quelque chose que se situe le problème, sans aucun doute. Tu dois chercher une méthode qui s'appelle elle même, voire un constructeur qui instancie un objet de son type. StackOverflow est symptômatique de ça.
Essaie de respirer un bon coup, de remettre de l'ordre dans tes idées et de poster un peu de code plus détaillé.
Excusez le nombre d'imprécision...Je débute...
1)Pour la question du construvteur :
public MyListModel(ArrayList contactArray)
{
listeContact = new MyListModel(contactArray);
}
effectivement, il manquait qq choz,cr j'ai fait un essai avec un constructeur vide.
2)J'utilise Eclipse pour coder et faire des test...et mes erreurs apparaissent lors de test unitaire
3)forcé le typage...pour moi ca veut dire MyListModel
(mais mon vocabulaire est peut etre inapproprié)
4)atteindre l'adresse : "org.nico.contact@32c41a"
lorsque je fais un System.out.println d'un Contact
Mais ce n'est peut etre que des informations sur l'objet
5)Pour l'erreur StackOverflow, je ne comprends pas car je n'ai pas de fonctions récursive.
Je peux poster Les 4 classes que j'ai crée qui font environ 60 lignes chacunes si certain sont prét à les lire
En effet. Là tu déclares le type contenu par la liste, tout simplement.
Non tu te berlures complètement je pense. Ce n'est pas un contact que tu imprimes là. A mon avis, c'est la signature "toString" d'un tableau de Contact que tu donnes.
Je ne sais pas comment ça peut se faire, vu que tu ne dis pas travailler avec des tableaux mais bon.
D'ailleurs ce que tu obtiens n'est pas plutôt [Lorg.nico.contact;@32c41a :?:
Que tu dis. Tu n'en as pas écrit, mais tu en as une à l'insu de ton plein gré :lol:
Quelque chose de ce genre je pense:
Regarde d'abord ce point. Et après on verra si on plonge dans le code :)
Effectivement...
public MyListModel(ArrayList contactArray)
{
listeContact = new MyListModel(contactArray);
}
est a l'origine du StackFlowError.
Car dans mon test unitaire je fais aussi
contacts = new MyListModel(contactList.contactArray)
J'ai donc supprimé celui de mon constructeur qui devient :
public MyListModel(ArrayList contactArray)
{
}
Une autre erreur apparait lorsque je relance un test :
NullPointerException
dans MyLIstModel, j'ai une méthode :
public void addElement(Contact contact)
{
listeContact.addElement(contact);
}
et dans mon test je fais :
contacts.addElement(c1)
où c1 est un contact (crée et testé)
Mais Eclipse me renvoie vers la méthode et son appel pour signaler mon erreur.
En utilisant une DefaultListModel je n'ai de plus de problems.
Merci pour les réponses, c'était instructif !
car à ce stade "contacts" (avec un s) est à null.
C'était avec plaisir :)