我正在从这样的网址加载图片:
new ImageIcon(new URL(url))
网址是http://example.com/image.png的内容,因此是互联网上的图片。
这很好用,但是我已经得到了一些关于我的程序用户的报告,他们在Java 8u20(以及稍后)的视网膜显示器上使用该程序时会得到奇怪的图像而不是常规图像。
我确定他们得到的奇怪图像是图像加载的CDN自动重定向到未找到图像的图像。经过一些研究,我发现使用Toolkit.getImage(URL url)
方法(https://bugs.openjdk.java.net/browse/JDK-8011059)时,较新版本的Java显然会自动将@ 2x添加到网址中。{/ 1}}。
问题当然是如果没有找到图像,CDN实际上会返回有效图像,因此Java可能认为它实际上找到了在视网膜显示器上使用的更高分辨率的图像。我的程序中的其他图像也以相同的方式使用new ImageIcon(URL url)
,但从其他来源加载,似乎工作正常。
现在的问题是,解决这个问题的最佳方法是什么?我无法访问CDN,因此我必须阻止Java尝试以某种方式加载第二个URL(如果这实际上是问题,但它看起来确实如此)。不幸的是,我没有计算机来测试它,所以有点难以确定哪种解决方案可行。