即时制作需要在其循环中加载图像的游戏(用于动画和内容),所以我使用了这个:
url = getClass().getResource("/pic/image.gif");
pic = ImageIO.read(new File(url.getPath()));
在IDE(netbeans)上运行游戏时运行良好,但是当我在构建项目后运行它时形成.jar文件它不起作用。阅读API文档,我看到ImageIO.read()
函数有几个重载实现,其中一个使用url
作为参数,我认为它可以帮助我解决我的问题,事实上它确实。
pic = ImageIO.read( getClass().getResource("/pic/image.gif") );
问题在于,以这种方式加载图像似乎需要很长时间,使游戏变得更慢(不多,但却引人注目)。所以问题是:为什么使用url
作为参数的函数比接收file
的函数慢?
答案 0 :(得分:1)
首先:你说你的游戏
需要在其循环中加载图像
我不明白这一点,我不认为我同意这个前提。 如果时序和性能至关重要,I / O应始终卸载到单独的线程。
也就是说,从URL读取需要比从文件读取更通用的代码。它需要处理从异地服务器下载,本地文件系统上的文件,甚至从JAR解压缩资源。最后一个是你的经历。
我建议将应用程序重写为而不是读取绘制循环中的图像,但如果你很懒,也可以将资源解压缩到临时文件夹(前面)并阅读从以前的文件。
ImageIO.setUseCache(false)
也可能通过在读取图像时使用内存缓存而不是磁盘缓存来帮助提高速度。特别是从JAR资源加载时。