所以,我试图为可能最终成为游戏的东西开发一个原型,并且在尝试将它们作为资源访问时我无法获取图像,禁止它有效。
这是代码:
public class Main {
static boolean finished = false;
static ArrayList<Entity> entities = new ArrayList<>();
JFrame frame = new JFrame("Battle System Prototype #1");
frame.setVisible(true);
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
if (JOptionPane.showConfirmDialog(frame, "Are you sure to close this window?", "Really Closing?",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
});
frame.addMouseListener(gml);
Graphic g = new Graphic();
frame.add(g);
BufferedImage playerDefault = null;
BufferedImage monsterDefault = null;
try {
playerDefault = ImageIO.read(getClass().getResource("/res/playerdef.png"));
monsterDefault = ImageIO.read(getClass().getResource("/res/monsterdef.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
entities.add(new Player(20, 325, 400, "Player 1", playerDefault, null, null, null, null));
entities.add(new Player(20, 325, 330, "Enemy", monsterDefault, null, null, null, null));
while (!finished) {
g.repaint();
}
}
public static void main(String[] args) {
Main main = new Main();
main.run();
}
}
这是堆栈跟踪:
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
at battleSystemPrototype1.Main.run(Main.java:113)
at battleSystemPrototype1.Main.main(Main.java:133)
/ images文件夹位于包装下,所以我不认为这是问题所在。我怀疑我在语法上遗漏了一些东西,但我不知道是什么。我做错了什么?
编辑:它是/ res文件夹,而不是/ images,以防万一。
答案 0 :(得分:-1)
如果您的代码在
中/some/path/src/packageName/Main.java
您的图片位于包目录下方的“res”目录中......
/some/path/src/packageName/res/playerdef.png
/some/path/src/packageName/res/monsterdef.png
然后是代码:
getClass().getResource("/res/playerdef.png")
将在此处查找资源:
[build-destination]/res/playerdef.png
相反,你想要:
getClass().getResource("res/playerdef.png")
这将在此处搜索资源:
[build-destination]/packageName/res/playerdef.png
注意缺少前导/
,它指示类加载器开始查看类路径的根目录,而不是从当前包开始。
注意:
以上假设您的特定构建环境会将src目录树中找到的任何资源类型文件(例如.png)复制到目标构建目录结构中的相应位置(实际目录或jar文件)。具体细节取决于您的构建工具或IDE。