- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在和我的伙伴一起制作 2D 游戏,并且我通过一些 Youtube 教程学习了很多关于一些基本游戏开发概念的知识。我正在学习的其中一件事是 Sprite (对于那些不知道的,2D 图像渲染到屏幕)以及如何在我的游戏中使用它们。我一直在使用 ImageIO.read(this.class.getResource(pathToMySprite))
但似乎 getResource()
正在返回 null
一些原因。
我一直在弄乱路径,在它前面添加“/”,删除“/”,放置 user.dir 属性以查看它是否需要整个路径,我仍然得到同样的错误。
TILE_TEXTURES(System.getProperty("user.dir") + "/textures/tile.png");
//ENTITY_TEXTURES("/textures/entity.png");
private BufferedImage img;
private SpriteSheet(String path) {
System.out.println(System.getProperty("user.dir"));
try {
//TODO: Fix this error, don't know what's wrong.
img = ImageIO.read(SpriteSheet.class.getResource(path)); // error here!!!
} catch (IOException e) {
e.printStackTrace();
}
}
public BufferedImage getImage() {
return img;
}
感谢任何帮助。我还没有评论代码(我通常会在我到达可以坐下来对我完成的事情感到满意的地方时这样做)但这是一个非常小的类(class)所以我认为你们能够理解什么是一切顺利。
保存图像的文件夹 IS 在我的项目的类路径中。我还包含了错误:
Exception in thread "Thread-2" java.lang.ExceptionInInitializerError
at com.brickbattle.client.src.gui.Sprite.<clinit>(Sprite.java:7)
at com.brickbattle.client.src.objs.Tile.<init>(Tile.java:67)
at com.brickbattle.client.src.objs.Player.initPlayerNum(Player.java:19)
at com.brickbattle.client.src.util.BrickBattle.init(BrickBattle.java:114)
at com.brickbattle.client.src.util.BrickBattle.run(BrickBattle.java:85)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: input == null! //HERE IS ERROR
at javax.imageio.ImageIO.read(Unknown Source)
at com.brickbattle.client.src.gui.SpriteSheet.<init>(SpriteSheet.java:17)
at com.brickbattle.client.src.gui.SpriteSheet.<clinit>(SpriteSheet.java:8)
再次感谢!
最佳答案
这个问题基本上与 ImageIO 无关,而是与 Class
/ClassLoader.getResource
或 getResourceAsStream
如何工作有关。
有关解释,请参阅 this answer .
无论如何,这些获取资源的方法只能从类路径中读取(即user.dir
在这里无济于事)。
这应该有效:
ImageIO.read(getClass().getResource("/path/to/resource"));
路径相对于类路径的根(由前导/指定)。
如果您的资源不在类路径中,只需使用:
ImageIO.read(new File("path/to/resource");
路径相对于您的应用程序从中启动的目录。
关于java - 尝试使用 ImageIO.read(class.getResource(URL)) 加载图像,但 getResource 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17002906/
两者有什么区别? 我的资源文件打包在根级包中。在我测试的特定情况下,调用 Class.class.getResource("/rec.txt") 似乎有效。但是,当我尝试在更大的环境 (hadoop)
该应用程序具有多语言 支持。但是我们在使用应用程序上下文刷新 Resources 时遇到了问题。 目前,我的 ViewModels 正在扩展 AndroidViewModel,这样我们就可以访问 Vi
我想了解使用 View.getResources() 和 View.getContext().getResources() 的真正区别。 例如,我必须从资源中为 TextView 设置颜色.. vie
getClass().getClassLoader().getResource()和getClass.getResource()有什么区别? 从资源中检索文件时,在什么情况下应该使用哪一个? 最佳答案
我从 What is the difference between Class.getResource() and ClassLoader.getResource()? 了解到并从自己的代码中,即 g
我一直在和我的伙伴一起制作 2D 游戏,并且我通过一些 Youtube 教程学习了很多关于一些基本游戏开发概念的知识。我正在学习的其中一件事是 Sprite (对于那些不知道的,2D 图像渲染到屏幕)
我有简单的 Activity : public class TestActivity extends MainActivity { @Override public void o
当我的测试类位于默认包中时,下面的测试方法通过,而当我将其移动到包中时,测试方法失败。 目录结构如下: src/ main/ java/ some.package/ r
这个问题已经有答案了: JavaFX: Weird ClassNotFoundException after updating to Java 9 (1 个回答) 已关闭 4 年前。 我是 Java
我想要以下形式的资源 URL C:/Users/.../build/classes/jam/lena1.png 为了实现这一点,我编写了以下代码 System.out.println(getClass
我希望有人能在这里帮助我,因为我已经与一个问题作斗争有一段时间了。在我的主类中,我使用以下命令: System.out.println(getClass().getClassLoader().getR
我有以下代码,用于在我的应用程序中创建带有两个选项卡的自定义 ListView: package com.test.testing; import android.content.Context; i
大家。 我是 Java 新手,正在使用 UI 制作培训项目。在培训过程中,我决定从资源加载图标并将其加载移动到不同的类中。并遇到问题。我真的试图自己找到答案,但找不到。代码如下。 主类 package
我在src文件夹下(在resources文件夹下)放了一些.txt文件。 但我无法在运行时从该资源创建有效的 File。 String path = this.getClass().getResour
这个问题在这里已经有了答案: Way to access resource files in python (4 个答案) 关闭 9 年前。 在 Java 中,如果我想读取包含算法资源数据的文件,我
我已经在 java SE 中设置了基本的 maven 项目,其中包含一个资源: main -java -resources -config -> database.properties
我有一个 A 类,它获取一个配置文件: this.getClass().getResource("cfgFile"); 现在我创建了一个需要 A 的 cfgFile 的新类 B。现在我正在做: A.c
这段代码不在mainActivity类中 错误: cannot find symbol method getResources() 代码: public void printPhoto(int im
我正在学习教程 here .该文件位于项目的同一根文件夹中。当它在 src 文件夹和同一个包文件夹中时,我已经尝试过这样做。这 3 个位置都不起作用。 具体的代码行是: ImageIcon ii =
我有以下问题。在我们的集成测试中,我们使用不同的配置,该配置将在测试之前使用以下代码从测试资源中加载: URL resource = ClassLoader.getSystemResource("ap
我是一名优秀的程序员,十分优秀!