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:
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
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 } } }
Et voici 3 sorties différentes, avec 3 objets differents:
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 ); } }
ici tout à fait normal!
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
encore tout a 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
Et pour finir, quand vient la chaine qui m'interesse, evidemment ça ne marche pas:
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.
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>
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'aiderEt désolé pour ce long post, les affichages sont un peu indigestes.
Sebastien
Partager