Exception Windows mais pas Linux...

Exception Windows mais pas Linux... - Java - Programmation

Marsh Posté le 26-07-2005 à 12:30:10    

Bonjour à tous,  
je suis en train de modifier un programme réalisé par d'autres personnes sous Linux avec JBuilder pour le porter sous Windows.
Les programmes JBuilder sont sensés fonctioner sous Windows mais apparemment c'est pas le cas pour toutes les fonctions.
Mon problème est que lorsque la fonction suivante est exécuté ...  

Code :
  1. int compteur = visualisationVoisin.getText().length();
  2. try {
  3.       if (type.equals("defaut" ))
  4.         visualisationVoisin.getDocument().insertString(compteur, texte, defaut);
  5.       if (type.equals("source" ))
  6.         visualisationVoisin.getDocument().insertString(compteur, texte, source);
  7.       if (type.equals("voisin" ))
  8.         visualisationVoisin.getDocument().insertString(compteur, texte, voisin);
  9.       if (type.equals("gras" ))
  10.         visualisationVoisin.getDocument().insertString(compteur, texte, gras);
  11.       if (this.isVisible())
  12.         visualisationVoisin.scrollRectToVisible(visualisationVoisin.modelToView(
  13.             visualisationVoisin.getDocument().getLength()));
  14.     }
  15.     catch (Exception ex) {System.out.println(ex);}


... l'exception suivante est lancée et rien ne s'affiche dans le cadre appelé "visualisationVoisin" :

Code :
  1. javax.swing.text.BadLocationException: Invalid insert


Je ne comprends pas pourquoi l'exception n'est lancée que sous Windows ! Quelqu'un peut m'aider ?
 
edit : visualisationVoisin est un JTextPane


Message édité par Kineas le 27-07-2005 à 10:43:48
Reply

Marsh Posté le 26-07-2005 à 12:30:10   

Reply

Marsh Posté le 27-07-2005 à 06:00:48    

* introduis des variables
* debuggue
* jette jbuilder
* apprend à lire les *traces* d'exception, pas juste le message
* apprend à expliquer ton problème en en donnant les tenant et les aboutissants, des valeurs concretes, bref essaie de le cerner, plutot que de donner un bout de code en vrac et un message d'exception sorti d'on ne sait ou
* renseigne toi un minimum sur l'oo, quand même, aussi, apres

Reply

Marsh Posté le 27-07-2005 à 10:31:05    

the real moins moins a écrit :

* introduis des variables


-> euh je vois pas vraiment où...


-> ce p**** de debuggeur de JBuilder(version evaluation) ne fonctionne pas !!  


-> il me semble avoir précisé que je reprenais un logiciel fait préalablement sous Linux avec JBuilder donc je n'ai pas vraiment le choix (je préférerait aussi le jeter !)

the real moins moins a écrit :

* apprend à lire les *traces* d'exception, pas juste le message


-> j'ai deja essayé mais ca donne rien (je vous ai donné le message d'exception seulement simplement parce que je trouvais ca plus clair !)

the real moins moins a écrit :

* apprend à expliquer ton problème en en donnant les tenant et les aboutissants, des valeurs concretes, bref essaie de le cerner, plutot que de donner un bout de code en vrac et un message d'exception sorti d'on ne sait ou


-> le truc c'est que le code fait des milliers de lignes !! En plus le problème ne vient pas du reste du code mais comme je l'ai précisé il vient du JTextPane qui accepte sous Linux de faire un "getDocument().insertString(compteur, texte, defaut);" mais qui renvoie une exception sous Windows??!!

the real moins moins a écrit :

* renseigne toi un minimum sur l'oo, quand même, aussi, apres


-> euh je vois pas ce que tu entends par oo ??!! (désolé d'être un noob... mais il me semble que le but de ce forum est justement d'aider les personnes qui ont moins d'expérience non ??)
 
Bon ce message n'a servi à rien et apparemment je vois que le problème auquel j'étais confronté n'est pas banal car personne n'a l'air de l'avoir déjà rencontré ! Me reste plus qu'à trouver quelque chose pour remplacer ce JTextPane...
 
 
//-----------------------------------------
Edit : j'ai modifier le code comme suit :  

Code :
  1. catch (Exception ex)
  2. {
  3.    ex.printStackTrace();
  4.      System.out.println("compteur=<"+compteur+">" );
  5.    }


et voilà ou tu peux voir le résultat :  
http://www.nomorepasting.com/paste.php?pasteID=45129


Message édité par Kineas le 27-07-2005 à 10:40:52
Reply

Marsh Posté le 27-07-2005 à 11:54:20    

ben deja on a la stacktrace en entier, on peut reflechir un peu, reste plus qu'a savoir ce qu'est visualisationVoisin et comment il est initialisé, etc... tout ca on peut pas le deviner hein

Reply

Marsh Posté le 27-07-2005 à 12:07:22    

Kineas a écrit :

-> euh je vois pas vraiment où...


Pour commencer, là ou ton code repete 14 fois les mêmes operations pour faire l'insert
 

Kineas a écrit :


-> ce p**** de debuggeur de JBuilder(version evaluation) ne fonctionne pas !!  


cfr plus bas
 

Kineas a écrit :


-> il me semble avoir précisé que je reprenais un logiciel fait préalablement sous Linux avec JBuilder donc je n'ai pas vraiment le choix (je préférerait aussi le jeter !)


Euh, à moins d'avoir vraiment pas de bol et d'être tombé sur un truc pire que je n'ose l'imaginer, tu dois pouvoir l'éditer avec n'importe quel editeur.. un ide ou un bête editeur texte... !?
 

Kineas a écrit :


-> j'ai deja essayé mais ca donne rien (je vous ai donné le message d'exception seulement simplement parce que je trouvais ca plus clair !)


Les premieres lignes de la trace doivent déjà te dire ou ça pète dans ton code. Tu le sais peut etre, mais tu nous l'as pas dit (vu qu'il y a 132 inserts, difficile de deviner du quel le message parle.. et on est même pas surs qu'il s'agisse d'un de ceux là.
 

Kineas a écrit :


-> le truc c'est que le code fait des milliers de lignes !! En plus le problème ne vient pas du reste du code mais comme je l'ai précisé il vient du JTextPane qui accepte sous Linux de faire un "getDocument().insertString(compteur, texte, defaut);" mais qui renvoie une exception sous Windows??!!


Bien sur que si que le problème vient du reste du code. D'ou l'interet de pouvoir l'isoler et le reproduire, ton problème.
 

Kineas a écrit :


-> euh je vois pas ce que tu entends par oo ??!!  


Orienté objet. Ca t'éviterait du code redondant comme celui là. Mais "après", j'ai dit :p
 

Kineas a écrit :


(désolé d'être un noob... mais il me semble que le but de ce forum est justement d'aider les personnes qui ont moins d'expérience non ??)
 
Bon ce message n'a servi à rien  


 
[:violon]
 

Kineas a écrit :


 
//-----------------------------------------
Edit : j'ai modifier le code comme suit :  

Code :
  1. catch (Exception ex)
  2. {
  3.    ex.printStackTrace();
  4.      System.out.println("compteur=<"+compteur+">" );
  5.    }


et voilà ou tu peux voir le résultat :  
http://www.nomorepasting.com/paste.php?pasteID=45129


Bon ben c'est déjà mieux :)
Le bout de code que tu nous a sorti, il vient donc de
kiss.CadreVoisins, methode ajoutTexte, et ça pète à la ligne 181?
C'est laquelle?
Sans debugger, ce que tu peux tjs faire c'est des print dans la console pour afficher les variables utilisées à cet endroit, par exemple


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-07-2005 à 12:19:09    

Alors tout d'abord la ligne 181 est la suivante :  

Code :
  1. visualisationVoisin.getDocument().insertString(compteur, texte, defaut);


Pour répondre à Souk, visualisationVoisin est un JTextPane (comme je l'ai dit au-dessus)
et pour ce qui est de l'initialisation c'est simplement fait lors de la déclaration de l'objet :  

Code :
  1. JTextPane visualisationVoisin = new JTextPane();


 
j'ai trouvé ca :  
Dans la javadoc de l'interface Document, pour la methode insertString, il est écrit :

Code :
  1. Throws:
  2. BadLocationException - the given insert position is not a valid position within the document


Apparemment ce serait la avraible compteur le problème (enfin c'est comme ca que je le comprends... ) mais pourquoi il n'y aurait un problème que sous Windows ??
 
PS : merci souk et the real moins moins de prendre du temps pour étudier mon problème !

Reply

Marsh Posté le 27-07-2005 à 12:24:24    

affiche  
* les variables compteur et texte
* la longueur courante du document (Document.getLength())
 


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-07-2005 à 12:38:56    

Bon alors y'a un truc bizarre là ! J'ai fait ce que tu m'as dis :  

Code :
  1. int compteur = visualisationVoisin.getText().length();
  2. System.out.println(visualisationVoisin.getDocument().getLength() + " : " + compteur);
  3. try {
  4.   if (type.equals("defaut" ))
  5.  visualisationVoisin.getDocument().insertString(compteur, texte, defaut);
  6.   ...
  7. }
  8. catch (Exception ex)
  9. {
  10.    ex.printStackTrace();
  11.    System.out.println("compteur=<"+compteur+">" );
  12. }


Et j'ai obtenu ca :  
http://www.nomorepasting.com/paste.php?pasteID=45137
 
Les valeurs étant dfférentes j'ai donc essayé de mettre :

Code :
  1. int compteur = visualisationVoisin.getDocument().getLength();


et au lieu d'obtenir rien du tout comme avant, il y a des choses qui s'inscrivent maintenant dans le JTextPanel alors qu'avant il n'y avait rien (ce qui s'affiche est presque bon mais des fois ca se superpose et des fois il en manque alors que je fais toujours le meme test ! c'est très bizare !)
 
Edit : j'ai remis le lien de dessus a jour aprce qu'il n'etait pas bon !


Message édité par Kineas le 27-07-2005 à 12:45:20
Reply

Marsh Posté le 28-07-2005 à 10:37:33    

Bon alors j'ai modifier mon code comme suit :  

Code :
  1. int compteur = visualisationVoisin.getText().length()-1;
  2. if (compteur < 0) {compteur = 0;}
  3. System.out.println(visualisationVoisin.getDocument().getLength() + " : " + compteur);
  4. try {
  5.   if (type.equals("defaut" ))
  6.  visualisationVoisin.getDocument().insertString(compteur, texte, defaut);
  7.   ...
  8.   if (this.isVisible())
  9.  visualisationVoisin.scrollRectToVisible(visualisationVoisin.modelToView(
  10.   visualisationVoisin.getDocument().getLength()));
  11. }
  12. catch (Exception ex)
  13. {
  14.    ex.printStackTrace();
  15.    System.out.println("compteur=<"+compteur+">" );
  16.    System.out.println("texte.length="+texte.length());
  17.    }


 
La pile d'eceptions est maintenant la suivante :
http://www.nomorepasting.com/paste.php?pasteID=45194
 
Je n'arrive toujours pas à comprendre ce qui cloche... (il faut que je trouve au plus tard demain donc ca s'annonce assez mal là...)

Reply

Marsh Posté le 28-07-2005 à 11:22:36    

Bon j'ai trouvé un moyen de contourner le problème !
J'ai simplement mis ca :  

Code :
  1. visualisationVoisin.setText(visualisationVoisin.getText()+texte);


au lieu de tout le bloc try...catch... !
 
Le seul problème est que je n'ai pas la mise en forme qu'il y a sous linux mais a défaut de faire mieux je me contenterai de ca !  
Merci jkik pour t'être penché sur mon problème

Reply

Marsh Posté le 28-07-2005 à 11:22:36   

Reply

Marsh Posté le 28-07-2005 à 11:51:35    

question bete:

Code :
  1. int compteur = visualisationVoisin.getText().length()-1;


a cet endroit la tu recupere la longueur du texte de ton containeur, pas celle du texte de ton document. je verrai plutot un  

Code :
  1. int compteur = visualisationVoisin.getDocument().getLength()-1;


 
parce que tu te base sur deux choses differentes et ton compteur n'a pas de reelle signification pour le document si tu ne l'initialise pas avec la longueur du document (j'arrive pas a m'exprimer ce matin moi [:pingouino] )

Reply

Marsh Posté le 28-07-2005 à 12:11:56    

Lol...
Non ca va en fait j'ai compris ce que tu voulais dire parce que j'y avais deja pensé ! Mais en changeant comme tu dis, il y a toujours un problème (en fait j'ai l'impression que la taille du conteneur renvoyée n'est jamais bonne et je comprends pas pourquoi ??!!)
Non la je suis resté sur ma solution au-dessus mais je suis en train de chercher si y'a pas un moyen de changer le style d'une partie d'un texte mais je trouve pas... :(

Reply

Marsh Posté le 28-07-2005 à 12:47:56    

y'a eu du delete ici ou quoi ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-07-2005 à 13:14:53    

Euh...
Ben non je croi pas...
 
Personne ne sait comment changer le style de seulement une partie du contenu d'un JTextPane alors ??

Reply

Marsh Posté le 28-07-2005 à 14:55:10    

J'ai essayé de mettre du style donc de la facon suivante :  

Code :
  1. visualisationVoisin.setText(visualisationVoisin.getText()+texte);
  2. System.out.println(" -> " + visualisationVoisin.getSelectionStart() + "-"
  3.          + visualisationVoisin.getText().length() + "|"
  4.         + visualisationVoisin.getSelectionStart()+texte.length());       
  5.    visualisationVoisin.select(visualisationVoisin.getSelectionStart(),visualisationVoisin.getText().length());//visualisationVoisin.getSelectionStart()+texte.length());
  6. //visualisationVoisin.setSelectionEnd(visualisationVoisin.getSelectionStart()+texte.length());
  7.    if (type.equals("defaut" ))
  8.  visualisationVoisin.setSelectedTextColor(null);
  9.    //visualisationVoisin.setLogicalStyle(defaut);
  10. if (type.equals("source" ))
  11.    visualisationVoisin.setSelectedTextColor(Color.blue);
  12.  //visualisationVoisin.setLogicalStyle(source);
  13. if (type.equals("voisin" ))
  14.  visualisationVoisin.setSelectedTextColor(new Color(201, 52, 214));
  15.    //visualisationVoisin.setLogicalStyle(voisin);
  16. if (type.equals("gras" ))
  17.  visualisationVoisin.setSelectedTextColor(Color.BLACK);
  18.    //visualisationVoisin.setLogicalStyle(gras);
  19.    //System.out.println("<" + visualisationVoisin.getSelectedText() +">" );
  20.    visualisationVoisin.setSelectionStart(visualisationVoisin.getText().length());


Ca ne marche pas mais je ne comprends pas pourquoi ?!
Pour information la trace ressemble a ca :  
 

Code :
  1. -> 0-1|01
  2. -> 0-5|04
  3. -> 0-6|01
  4. -> 0-13|07
  5. -> 0-14|01
  6. -> 0-18|04
  7. -> 0-22|04
  8. -> 0-30|08

Reply

Marsh Posté le 29-07-2005 à 08:25:29    

the real moins moins a écrit :

* introduis des variables
* debuggue
* jette jbuilder
* apprend à lire les *traces* d'exception, pas juste le message
* apprend à expliquer ton problème en en donnant les tenant et les aboutissants, des valeurs concretes, bref essaie de le cerner, plutot que de donner un bout de code en vrac et un message d'exception sorti d'on ne sait ou
* renseigne toi un minimum sur l'oo, quand même, aussi, apres


 
Tu penses que ca fait de toi un bon codeur ?
Tu sais combien de gens utilise l'objet pour rien ? Ben visiblement tu en fais partie. C'est pas une horreur s'il ne s'en sert pas.
Et même si c'est pas le cas, apprend à lire les questions, ca marche sour Linux mais pas Windows. Y'a moins de chance pour que cela vienne de son code que d'une feature de la jdk entre windows-unix. Et reprendre le code de quelqu'un c'est pas facile. Et il va pas perdre son temps à débugger les classes de la jdk en byte-code. Faut juste qu'il trouve une autre solution comme il a commencé. Il perdra moins de temps.  
Surtout que ca doit etre pour aujourd'hui si j'ai bien compris....


Message édité par labyplaisir le 29-07-2005 à 08:34:09
Reply

Marsh Posté le 29-07-2005 à 08:32:35    

labyplaisir a écrit :

ca marche sour Linux mais pas Windows. Y'a peu de chances pour que cela vienne de son code


ouais, bien sur :o

Reply

Marsh Posté le 29-07-2005 à 09:02:05    

lorill a écrit :

ouais, bien sur :o


 
Tu connais des softwares de cette taille, (multi-plateformes ou non) sans bugs ?


Message édité par labyplaisir le 29-07-2005 à 09:03:55
Reply

Marsh Posté le 29-07-2005 à 09:05:11    

non, mais je suis a peu pres persuadé que d'autres font aussi de l'insertion de texte stylé.

Reply

Marsh Posté le 29-07-2005 à 09:17:40    

lorill a écrit :

non, mais je suis a peu pres persuadé que d'autres font aussi de l'insertion de texte stylé.


 
Lol, ouai j'imagine. Mais disons que la facon dont le code donné par Kineas le fait, fait peut-être resortir un bug sous Windows.
Mais c'est clair que de ce point de vue c'est la faute à son code  ;)
(De toute facon c'était qu'un supposition que je fait, et j'pense pas qu'on ai la réponse un jour, snif)


Message édité par labyplaisir le 29-07-2005 à 09:18:54
Reply

Marsh Posté le 29-07-2005 à 09:54:50    

labyplaisir a écrit :

Tu penses que ca fait de toi un bon codeur ?
Tu sais combien de gens utilise l'objet pour rien ? Ben visiblement tu en fais partie. C'est pas une horreur s'il ne s'en sert pas.


Ben quand même en java, ça semble un minimum


Message édité par R3g le 29-07-2005 à 09:55:09

---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 29-07-2005 à 10:27:11    

De toute facon je vois pas comment avec le morceau de code que j'ai montré que vous voyez que je fais pas de l'objet (en plus c'est pas moi qui est fait ce programme a la base je ne fais que le modifier mais c'est quand meme bien de l'objet !)

Reply

Marsh Posté le 29-07-2005 à 10:57:50    

Pour en revenir au problème, j'ai modifié le code comme suit :  

Code :
  1. visualisationVoisin.setText(visualisationVoisin.getText()+texte);
  2. visualisationVoisin.setSelectionStart(visualisationVoisin.getText().length()-texte.length());
  3.     visualisationVoisin.setSelectionEnd(visualisationVoisin.getText().length());
  4. System.out.println("<" + visualisationVoisin.getSelectedText() +">" );
  5.     System.out.println(" -> " + visualisationVoisin.getSelectionStart() + "-" + visualisationVoisin.getSelectionEnd());
  6. if (type.equals("defaut" ))
  7. {
  8.    visualisationVoisin.setSelectedTextColor(null);
  9.  System.out.println("defaut" );
  10. }
  11. if (type.equals("source" ))
  12. {
  13.    visualisationVoisin.setSelectedTextColor(Color.blue);
  14.  System.out.println("source" );
  15. }
  16. if (type.equals("voisin" ))
  17. {
  18.  visualisationVoisin.setSelectedTextColor(new Color(201, 52, 214));
  19.  System.out.println("voisin" );
  20.    }
  21. if (type.equals("gras" ))
  22. {
  23.    visualisationVoisin.setSelectedTextColor(Color.BLACK);
  24.  System.out.println("gras" );
  25. }


Ca ne fonctionne toujours pas et la je vois vraiment plus ! (le programme ne se termine meme pas il se bloque en plein milieu et je sais pas pourquoi ?!
Bon voila merci quand meme d'avoir essayer de m'aider !

Reply

Marsh Posté le 29-07-2005 à 11:44:00    

un bon gros paquet de [:mlc] pour ce ramassi de conneries, mais alors le plus gros, c'est quand même ça:
 

labyplaisir a écrit :

Et il va pas perdre son temps à débugger les classes de la jdk en byte-code.


[:mlc]
oh eh merde, j'ai même pas l'energie d'argumenter.  
(en "bytecode"? t'as jamais utilisé un debugger en java ou quoi? )


Message édité par the real moins moins le 29-07-2005 à 11:44:44

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 29-07-2005 à 12:27:52    

the real moins moins a écrit :

un bon gros paquet de [:mlc] pour ce ramassi de conneries, mais alors le plus gros, c'est quand même ça:
[:mlc]
oh eh merde, j'ai même pas l'energie d'argumenter.  
(en "bytecode"? t'as jamais utilisé un debugger en java ou quoi? )


 
Comme tes posts : HS (Hors Sujet). Ou flood, comme tu préfères. (Et je suis d'accord que moi aussi c'est HS)
J'pensais que t'avais compris le sens de mon premier post.
 
 

R3g a écrit :

Ben quand même en java, ça semble un minimum


Ouai, c'est vrai mais tout dépend du contexte, ici c'est pas nécessaire surtout dans le temps qu'il lui reste.


Message édité par labyplaisir le 29-07-2005 à 12:32:03
Reply

Marsh Posté le 05-08-2005 à 10:29:43    

Pour moi l'origine du problème n'est pas le BadLocationException.
 
Avant ça tu as d'autres exceptions :
 
java.lang.ArrayIndexOutOfBoundsException
...
  at kiss.CadreVoisins.ajoutTexte(CadreVoisins.java:181)
  at kiss.MemoireLongTerme.plusProchesVoisinsLSA(MemoireLongTerme.java:212)
  at kiss.MemoireLongTerme.plusProchesVoisins(MemoireLongTerme.java:72)
  at kiss.ProcessusVoisins.rechercherVoisins(ProcessusVoisins.java:237)
  at kiss.ProcessusVoisins.run(ProcessusVoisins.java:84)
 
Le ArrayIndexOutOfBoundsException signifie que tu utilises un tableau avec un mauvais indice (<0 ou > taille du tableau)
 

Reply

Marsh Posté le 05-08-2005 à 11:18:19    

faudrait apprendre a lire des stacktraces la un peu [:pingouino]
le ArrayIndexOutOfBoundsException vient pas de lui mais d'un composant Swing :o
(enfin si je me souviens bien de ce topic (joli deterrage au passage [:itm] ))

Reply

Marsh Posté le 05-08-2005 à 11:28:23    

souk a écrit :

faudrait apprendre a lire des stacktraces la un peu [:pingouino]
le ArrayIndexOutOfBoundsException vient pas de lui mais d'un composant Swing :o
(enfin si je me souviens bien de ce topic (joli deterrage au passage [:itm] ))


 
Faudrait apprendre à lire les stacktraces jusqu'au bout :p, c'est un composant Swing qui l'èleve l'exception mais c'est du code à lui qui est à l'origine de l'appel
 
Donc il faudrait qu'il vérifie le code de CadreVoisins.ajoutTexte(CadreVoisins.java:181) pour voir en quoi ça peut aboutir à une exception.

Reply

Marsh Posté le 05-08-2005 à 11:47:31    

c'est du code a lui qui fait l'appel, mais c'est pas lui qui utilise un tableau

Reply

Marsh Posté le 05-08-2005 à 14:57:23    

souk a écrit :

c'est du code a lui qui fait l'appel, mais c'est pas lui qui utilise un tableau


 
Au temps pour moi, j'ai mal formulé ce que je voulais dire.
 
Le ArrayIndexOutOfBoundsException signifie qu'un tableau est utilisé avec un mauvais indice (<0 ou > taille du tableau)

Reply

Marsh Posté le 05-08-2005 à 15:08:10    

Bidem a écrit :

Au temps pour moi, j'ai mal formulé ce que je voulais dire.
 
Le ArrayIndexOutOfBoundsException signifie qu'un tableau est utilisé avec un mauvais indice (<0 ou > taille du tableau)


 :sweat:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed