java – 为什么我的BufferedImage从ImageIO.read()接收一个空值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 为什么我的BufferedImage从ImageIO.read()接收一个空值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1978字,纯文字阅读大概需要3分钟。
内容图文
BufferedImage = ImageIO.read(getClass().getResourceAsStream("/Images/player.gif"));
首先,是的,我确实将图像文件夹添加到了我的类路径中.
为此,我收到错误java.lang.IllegalArgumentException:input == null!
我不明白为什么上面的代码不起作用.从我读到的一切,我不明白为什么它不会.我被告知我应该使用FileInputStream而不是GetResourceAsStream,但正如我刚才所说,我不明白为什么.我已经阅读了有关方法和各种指南的文档,这似乎可行.
编辑:好的,尝试清除一些关于我在类路径中的内容.
这是在Eclipse中创建的项目.一切都在项目文件夹DreamGame中,包括“Images”文件夹.当然,DreamGame是在类路径中.我知道这是有效的,因为我正在使用代码中前面提供的gif信息读取/ Images中的文本文件.
所以我有:/DreamGame/Images/player.gif
编辑2:当前在原始帖子中的行是所有正在传递的行;没有/DreamGame/Images/player.gif,只是/Images/player.gif.这是来自ImagesLoader类中的方法,该方法在创建PlayerSprite中的对象时调用.主要类是DreamGame.我正在使用Run选项直接从Eclipse运行代码而没有特殊参数
试图弄清楚如何找到正在加载类的类加载器.对不起,与大多数人相比,我对此非常陌生.
好的,这就是getClassLoader()给我的东西:sun.misc.Launcher$AppClassLoader@4ba778
getClass().getResource(getClass().getName()“.class”)返回/home/gixugif/Documents/projects/DreamGame/bin/ImagesLoader.class
图像文件也被放入bin中.要仔细检查,我从bin中删除了文件,清理了项目并运行它.仍然有同样的问题,图像文件回到bin
解决方法:
基本上,Class.getResourceAsStream不会按照您的想法执行.
它试图获取相对于该类的类加载器的资源 – 所以除非你有一个以你的文件系统根目录作为其根目录的类加载器,否则它将找不到你所追求的文件.
听起来你应该真的有这样的东西:
BufferedImage = ImageIO.read(getClass().getResourceAsStream("/Images/player.gif"))
(编辑:显示的原始代码不同,并具有完整的文件系统路径.)
并确保将图像复制到当前类的类加载器的适当位置以获取Images目录.当你将它打包到一个jar文件中时,你也想要那里的Images目录.
编辑:这个位可能是问题:
First of all, yes I did add the image folder to my classpath.
images文件夹不应该在类路径中 – Images文件夹的父级应该是,因此当类加载器查找Images目录时,它将在其根目录下找到它.
内容总结
以上是互联网集市为您收集整理的java – 为什么我的BufferedImage从ImageIO.read()接收一个空值全部内容,希望文章能够帮你解决java – 为什么我的BufferedImage从ImageIO.read()接收一个空值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。