Pb de tableau de type File - Java - Programmation
Marsh Posté le 05-11-2002 à 16:44:14
toi t'as VRAIMENT du mal avec les tableaux.
aucune réponse valable tant que :
- Tu ne montres pas le code complet (comment est déclaré files)
- Tu expliques ce qui cloche. "Ca ne marche" ne donne aucune info
Marsh Posté le 05-11-2002 à 16:48:23
DarkLord a écrit a écrit : toi t'as VRAIMENT du mal avec les tableaux. aucune réponse valable tant que : - Tu ne montres pas le code complet (comment est déclaré files) - Tu expliques ce qui cloche. "Ca ne marche" ne donne aucune info |
T'as l'impression que j'pédale dans l'yaourt mais j'avance jour après jour ...
Donc déclaration : File[] files=null;
Le probleme c'est que j'arrive pas a avoir de traces ...
La seule chose que je sais c'est que mon traitement ne va pas au bout .
P.S : C'est une servlet et j'ai regarder dans les log de Tomcat
J'ai rien vu. Où est-ce-que je pourrais regarder sinon ?
Marsh Posté le 05-11-2002 à 16:51:23
persepolis a écrit a écrit : T'as l'impression que j'pédale dans l'yaourt mais j'avance jour après jour ... Donc déclaration : File[] files=null; |
ah bin c'est clair t'es venu avec un problème similaire la semaine passée et c'était exactement la même erreur !!! Si tu mets ton tableau à null il n'y a aucune référence hein
Donc laisse moi rire. T'es quand meme très fort de venir à deux semaines d'intervalles avec exactement le meme genre de problème et exactement la meme cause
Marsh Posté le 05-11-2002 à 16:52:37
persepolis a écrit a écrit : T'as l'impression que j'pédale dans l'yaourt mais j'avance jour après jour ... Donc déclaration : File[] files=null; |
Et si tu initialisais ton tableau ????
Marsh Posté le 05-11-2002 à 16:54:07
Bon un tableau est qqch de statique. Tu dois connaitre la taille de ton tableau avant de le créer. Donc toi tu ne la connais pas et tu le mets à null pensant que c'est bon ...
Bon déjà y a un prob de comprhénsion à ce niveau. Si un objet référence null, il n'y a aucune instance associée avec cet objet (et donc tenter d'accéder à une des "cases" du tableau va te jeter puisqu'il n'y a PAS de tableau).
Lorsque tu ne connais pas la taille à l'avance, utilise un arraylist
Code :
|
je n'ai pas dit que le reste de ton code est correct hein. Ca c'est une autre histoire
Marsh Posté le 05-11-2002 à 16:58:57
DarkLord a écrit a écrit : Lorsque tu ne connais pas la taille à l'avance, utilise un arraylist |
Tiens moi j'utilise plutot un Vector. C'est mieux ArrayList ? C'est quoi les differences ?
Marsh Posté le 05-11-2002 à 17:01:34
R3g a écrit a écrit : Tiens moi j'utilise plutot un Vector. C'est mieux ArrayList ? C'est quoi les differences ? |
un vector est synchronisé et est bcp plus lent qu'une arraylist. Si tu dois mettre des éléments de meme type et que tu ne connais pas la taille, l'arraylist est le meilleur choix (pour autant qu'il n'y ait pas de problème de concurence et ici c'est clairemnt pas le cas).
A+
Marsh Posté le 05-11-2002 à 17:05:00
Ok merci
Marsh Posté le 05-11-2002 à 17:07:03
R3g a écrit a écrit : Ok merci |
you're welcome
Marsh Posté le 05-11-2002 à 17:10:52
DarkLord a écrit a écrit : ArrayList res = new ArrayList(); while((entry = zis.getNextEntry()) != null ) { res.add(new File(entry.getName()); } File[] files = res.toArray(new File[res.size()]); |
Merci,
J'avoue que j'ai plus qu'à mettre 10 balles dans le bourrin...
par contre à la compil, j'ai cette erreur que je ne m'explique point ?
UploadServlet.java [97:1] incompatible types
found : java.lang.Object[]
required: java.io.File[]
File[] files = res.toArray(new File[res.size()]);
What happened?
Marsh Posté le 05-11-2002 à 17:12:07
ah oui c'est ma faute. J'ai oublié un truc. Desolaid je corrige. C'est parce que toArray renvoit un tableau d'objets et il faut le caster. Deux secondes j'édite
Marsh Posté le 05-11-2002 à 23:50:19
DarkLord a écrit a écrit : un vector est synchronisé et est bcp plus lent qu'une arraylist. Si tu dois mettre des éléments de meme type et que tu ne connais pas la taille, l'arraylist est le meilleur choix (pour autant qu'il n'y ait pas de problème de concurence et ici c'est clairemnt pas le cas). A+ |
bouhou....vous pouvez pas connaître le désarroi du mec qui code des applets en Java < 1.5, quand ArrayList n'existait pas!
Sinon, si je poste avant que Dark n'édite :
File[] files = (File[]) res.toArray(new File[res.size()]);
Marsh Posté le 05-11-2002 à 23:51:20
gfive a écrit a écrit : bouhou....vous pouvez pas connaître le désarroi du mec qui code des applets en Java < 1.5, quand ArrayList n'existait pas! Sinon, si je poste avant que Dark n'édite : File[] files = (File[]) res.toArray(new File[res.size()]); |
euh .. il a edité son premier post il y a bien longtemps
Marsh Posté le 06-11-2002 à 08:35:38
Merci everybody
Marsh Posté le 06-11-2002 à 11:05:42
Citation : |
Mouais ca ne marche pas ton cast. alors avant d écrire du code qui marche pas fodrait vérifier hein
Marsh Posté le 06-11-2002 à 11:07:27
Prince2Lu a écrit a écrit : Mouais ca ne marche pas ton cast. alors avant d écrire du code qui marche pas fodrait vérifier hein |
bien sur que ca marche.
avant de critiquer les autres, vérifie que c'est pas toi qui merde !
Marsh Posté le 06-11-2002 à 11:15:04
Prince2Lu a écrit a écrit :
|
Marsh Posté le 06-11-2002 à 12:04:43
Prince2Lu a écrit a écrit :
|
Pourquoi ça ne marcherait pas ? Qu'est-ce qui cloche à ton avis dans ce cast ?
(il y a pas d'âge pour apprendre des trucs... )
Marsh Posté le 06-11-2002 à 14:44:48
Voici mon code :
LinkedList listTemp = new LinkedList();
Parameter tab [] = (Parameter [])listTemp.toArray();
Voici l'exception :
type Exception report
message Internal Server Error
description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.
exception
java.lang.ClassCastException: java.lang.Object
Donc si kk1 peut m expliquer pourquoi ca marche pas , je suis preneur
pour l'instant je fais ce truc qui marche par contre :
Object objTab [] = listTemp.toArray();
Parameter prmTab [] = new Parameter [objTab.length];
for (int i=0 ; i < objTab.length ; i++)
prmTab[i]=(Parameter)objTab[i];
mais bon c pas le top...
Marsh Posté le 06-11-2002 à 14:54:25
'tain, mais tlis les réponses, bordel!!!
On te dit :
Parameter tab [] = (Parameter [])listTemp.toArray(new Parameter[listTemp.size()] );
alors bon...
Marsh Posté le 06-11-2002 à 14:54:55
j'adore les gens qui critiquent et qui ne savent meme pas lire ...
Marsh Posté le 06-11-2002 à 14:57:58
Citation : File[] files = (File[]) res.toArray(new File[res.size()]); |
Prince2Lu a écrit a écrit : Voici mon code : LinkedList listTemp = new LinkedList(); Parameter tab [] = (Parameter [])listTemp.toArray(); |
Prince2Lu a écrit a écrit : alors avant d écrire du code qui marche pas fodrait vérifier hein |
Marsh Posté le 06-11-2002 à 15:10:35
c'est la triplette magique du reply haineux, Gfive/Darklord/Benou!! D
Marsh Posté le 06-11-2002 à 15:11:45
Marsh Posté le 06-11-2002 à 15:15:01
Citation : |
Désolé Pardon Mille excuses Mea Culpa Excuse me Sorry
Et pour ma culture personnelle, pourquoi avec toArray() ca marche pas et que ca marche avec toArray(Object []) ???
Marsh Posté le 06-11-2002 à 15:46:41
BifaceMcLeOD a écrit a écrit : Je réponds... |
Marsh Posté le 06-11-2002 à 15:51:30
Si tu lis le Javadoc de ces 2 fonctions, tu verras que toArray(Object[]) prend le tableau en argument et le remplit avec les éléments de la liste (par sécurité, si le tableau est trop petit, cette méthode en réalloue un nouveau). Alors que toArray() sans argument alloue un nouveau tableau et le remplit avec les éléments de la liste.
Pourquoi ça marche : parce que si c'est la méthode toArray() qui alloue le tableau, celui-ci aura comme type à l'exécution Object[]. Forcément, puisque la méthode ne peut pas utiliser un type plus spécialisé qu'Object comme type des éléments du tableau. Par conséquent, si tu essaies de caster en File[] un tableau alloué en tant que Object[], tu te prends une ClassCastException.
Alors que si tu alloues toi-même le tableau, et que tu le passes en argument à toArray, celui-ci aura déjà le bon type (à moins que tu sois débile ) puisque tu auras déjà alloué un tableau de type File[]. Et quand, en retour de la fonction toArray, tu essaies de le caster en File[], il n'y a plus d'erreur, puisque c'est effectivement son type à l'exécution.
Capici ?
Marsh Posté le 06-11-2002 à 15:57:42
rien à redire
Marsh Posté le 05-11-2002 à 16:33:44
J'essaie a partir d'un fichier zip que je dezippe de constituer un tableau de type File et ca ne marche pas .
ZipEntry entry ;
int ind=0;
while( ( entry = zis.getNextEntry() ) != null ) {
files[ind]=new File(entry.getName());
ind++;
}
Qq'un a-t-il une idée ?
---------------
Evite les personnes arrogantes et vulgaires, elles sont un tourment pour l'esprit.