On 10/29/2013 05:45 PM, Alexander Scherbatiy wrote:
2. I'm not sure that the proposed getScaledImageName() implementation in ScalableToolkitImage works perfectly for URLs like this:

http://www.exampmle.com/dir/image

In this case it will try to find 2x image here:

http://www.exam...@2x.com/dir/image

which doesn't look correct.
Fixed. Only path part of a URL is converted to path2x.

Hi Alexander,

URLs like this:

http://www.example.com/dir.ext/image

will still be translated to:

http://www.example.com/d...@2x.ext/image


I think you need to search for last '.' after the last '/' in the getScaledImageName();


Also the following code has some additional bugs:

 853         static Image toScalableImage(Image image, URL url) {
 854
 855             if (url != null && !url.toString().contains("@2x")
 856                     && !(image instanceof ScalableToolkitImage)) {
 857                 String protocol = url.getProtocol();
 858                 String host = url.getHost();
 859                 String file = url.getPath();
 860                 String file2x =*host +*getScaledImageName(file);
 861                 try {
 862                     URL url2x = new URL(protocol, host, file2x);
 863                     url2x.openStream();
 864                     return new ScalableToolkitImage(image, 
getDefaultToolkit().getImage(url2x));
 865                 } catch (Exception ignore) {
 866                 }
 867             }
 868             return image;
 869         }

Why are you prepending *host* to getScaledImageName(file) in line 860? Let's take the following URL for example:

http://www.example.com/dir/image.jpg

protocol = "http"
host = "www.example.com"
file = "/dir/image.jpg"
file2x = "*www.example.com*/dir/im...@2x.jpg"
url2x = URL("http://www.example.com*www.example.com*/dir/im...@2x.jpg";)


You are missing a part in URL (de)construction - the optional port! For example in the following URL:

http://www.example.com:8080/dir/image.jpg

You should extract the port from original URL and use it in new URL construction if present (!= -1).


I would also close the stream explicitly after probing for existence of resource rather than delegating to GC which might not be promptly and can cause resource exhaustion (think of MAX. # of open file descriptors):

        try (InputStream probe = url.openStream()) {}



Regards, Peter


Reply via email to