Hello,
j'ai fait une appli contenant une liste et acceptant le drag and drop. Le but est de pouvoir "dragger" des images depuis un web browser et de les dropper dans la liste. Evidemment ce n'est pas si simple que ça: si l'image est un lien vers une page web, c'est le lien qui vient par defaut et non la source de l'image. J'ai donc du passer par les DataFlavor pour acceder aux objets qui m'interessent. Je vous donne les lignes de codes:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
public boolean importData(TransferHandler.TransferSupport info) {
 
for(DataFlavor flavor : info.getDataFlavors())
 {
 data = (String)t.getTransferData(DataFlavor.stringFlavor);
 if( flavor.isFlavorTextType() )
   {
   Object o = new Object();
   o = t.getTransferData( flavor );
 
   String s_object_string = new String();
   s_object_string = o.toString();
 
   if( isUrlOfImage( s_object_string ) ){ blablabla le code a faire }
   }
}
Pas complique. Le pb vient dans la fonction isUrlOfImage. Je vous donne le code qui affichage les incoherences:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
protected boolean isUrlOfImage(String data) {
  String copy = new String( data );
  System.out.println( "stringDataR : " + copy + " len=" + copy.length() );
  int i_src = copy.indexOf("src");
  int i_jpg = copy.indexOf("jpg");
  System.out.println( "position of src : " + i_src + " jpg :" + i_jpg );
 
  char [] pc_curr = new char[4];
  for( int i=0; i<copy.length()-3; i++ ){
    copy.getChars(i, i+3, pc_curr, 0);
    String s_curr_string = new String( pc_curr );
   System.out.print( "|" + s_curr_string );
   }
}
Et voici 3 sorties différentes, avec 3 objets differents:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
objectToString: [B@da2cef
stringDataR : [B@da2cef len=9 
position of src : -1 jpg :-1 
|[B@|B@d|@da|da2|a2c|2ce
ici tout à fait normal!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
objectToString: http://kanda.tkl.iis.u-tokyo.ac.jp/~toyoda/cgi-bin/feedsearchtv.cgi?e=http://vicky.ti-da.net/e2292620.html
stringDataR : http://kanda.tkl.iis.u-tokyo.ac.jp/~toyoda/cgi-bin/feedsearchtv.cgi?e=http://vicky.ti-da.net/e2292620.html len=106
position of src : -1 jpg :-1                                                                                                   
|htt|ttp|tp:|p:/|://|//k|/ka|kan|and|nda|da.|a.t|.tk|tkl|kl.|l.i|.ii|iis|is.|s.u|.u-|u-t|-to|tok|oky|kyo|yo.|o.a|.ac|ac.|c.j|.jp|jp/|p/~|/~t|~to|toy|oyo|yod|oda|da/|a/c|/cg|cgi|gi-|i-b|-bi|bin|in/|n/f|/fe|fee|eed|eds|dse|sea|ear|arc|rch|cht|htv|tv.|v.c|.cg|cgi|gi?|i?e|?e=|e=h|=ht|htt|ttp|tp:|p:/|://|//v|/vi|vic|ick|cky|ky.|y.t|.ti|ti-|i-d|-da|da.|a.n|.ne|net|et/|t/e|/e2|e22|229|292|926|262|620|20.|0.h|.ht|htm
encore tout a fait normal.

Et pour finir, quand vient la chaine qui m'interesse, evidemment ça ne marche pas:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
objectToString: <a linkindex="4" href="http://kanda.tkl.iis.u-tokyo.ac.jp/%7Etoyoda/cgi-bin/feedsearchtv.cgi?e=http://vicky.ti-da.net/e2292620.html"><img src="http://kanda.tkl.iis.u-tokyo.ac.jp/%7Etoyoda/feed-test/getimages/otona-grico-4/318.jpg" height="75" width="100"></a>                                               
stringDataR : <a linkindex="4" href="http://kanda.tkl.iis.u-tokyo.ac.jp/%7Etoyoda/cgi-bin/feedsearchtv.cgi?e=http://vicky.ti-da.net/e2292620.html"><img src="http://kanda.tkl.iis.u-tokyo.ac.jp/%7Etoyoda/feed-test/getimages/otona-grico-4/318.jpg" height="75" width="100"></a> len=518                                                  
position of src : -1 jpg :-1                                                                                                                                         
|<a|a|a | | l|l|li|i|in|n|nk|k|ki|i|in|n|nd|d|de|e|ex|x|x=|=|="|"|"4|4|4"|"|" | | h|h|hr|r|re|e|ef|f|f=|=|="|"|"h|h|ht|t|tt|t|tp|p|p:|:|:/|/|//|/|/k|k|ka|a|an|n|nd|d|da|a|a.|.|.t|t|tk|k|kl|l|l.|.|.i|i|ii|i|is|s|s.|.|.u|u|u-|-|-t|t|to|o|ok|k|ky|y|yo|o|o.|.|.a|a|ac|c|c.|.|.j|j|jp|p|p/|/|/%|%|%7|7|7E|E|Et|t|to|o|oy|y|yo|o|od|d|da|a|a/|/|/c|c|cg|g|gi|i|i-|-|-b|b|bi|i|in|n|n/|/|/f|f|fe|e|ee|e|ed|d|ds|s|se|e|ea|a|ar|r|rc|c|ch|h|ht|t|tv|v|v.|.|.c|c|cg|g|gi|i|i?|?|?e|e|e=|=|=h|h|ht|t|tt|t|tp|p|p:|:|:/|/|//|/|/v|v|vi|i|ic|c|ck|k|ky|y|y.|.|.t|t|ti|i|i-|-|-d|d|da|a|a.|.|.n|n|ne|e|et|t|t/|/|/e|e|e2|2|22|2|29|9|92|2|26|6|62|2|20|0|0.|.|.h|h|ht|t|tm|m|ml|l|l"|"|">|>|><|<|<i|i|im|m|mg|g|g | | s|s|sr|r|rc|c|c=|=|="|"|"h|h|ht|t|tt|t|tp|p|p:|:|:/|/|//|/|/k|k|ka|a|an|n|nd|d|da|a|a.|.|.t|t|tk|k|kl|l|l.|.|.i|i|ii|i|is|s|s.|.|.u|u|u-|-|-t|t|to|o|ok|k|ky|y|yo|o|o.|.|.a|a|ac|c|c.|.|.j|j|jp|p|p/|/|/%|%|%7|7|7E|E|Et|t|to|o|oy|y|yo|o|od|d|da|a|a/|/|/f|f|fe|e|ee|e|ed|d|d-|-|-t|t|te|e|es|s|st|t|t/|/|/g|g|ge|e|et|t|ti|i|im|m|ma|a|ag|g|ge|e|es|s|s/|/|/o|o|ot|t|to|o|on|n|na|a|a-|-|-g|g|gr|r|ri|i|ic|c|co|o|o-|-|-4|4|4/|/|/3|3|31|1|18|8|8.|.|.j|j|jp|p|pg|g|g"|"|" | | h|h|he|e|ei|i|ig|g|gh|h|ht|t|t=|=|="|"|"7|7|75|5|5"|"|" | | w|w|wi|i|id|d|dt|t|th|h|h=|=|="|"|"1|1|10|0|00|0|0"|"|">|>|><|<|</|/|/a|a|a>
Remarquez la longueur délirante de 518 caractères, alors que la chaine n'en fait pas plus de 300. Et l'affichage des morceaux de 3 caractères, qui fait tantôt 1 tantôt 2, mais jamais 3.

J'ai essayé différentes fonctions de chaines, la plupart donne des résultats aberrants. J'ai juste réussi à virer les " et les espaces de ma chaine avec la méthode replace, qui elle marche, j'ai ensuite essayé dessus, mais pas mieux.

Alors, pb de o.toString()? Un peu violent? Pb 'accès mémoire. Je ne vois pas. Si vous voyez merci de m'aider Et désolé pour ce long post, les affichages sont un peu indigestes.

Sebastien