Mak*_*gz3 -2 java netbeans project embedded-resource
我最初是从 Chillax 开始的,在临近截止日期遇到这么多问题之后,我又回到了我更熟悉的 IDE NetBeans,并将我的方法更改为更基本的“Asteroid”类型游戏:
在 NetBeans 中,我得到:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
at gayme.Craft.<init>(Craft.java:27)
at gayme.Board.<init>(Board.java:54)
at gayme.Gayme.<init>(Gayme.java:9)
at gayme.Gayme.main(Gayme.java:19)
Java Result: 1
Run Code Online (Sandbox Code Playgroud)
资料来源:(工艺 26 - 34)
public Craft() {
ImageIcon ii = new ImageIcon(this.getClass().getResource("craft.png"));
image = ii.getImage();
width = image.getWidth(null);
height = image.getHeight(null);
missiles = new ArrayList();
visible = true;
x = 40;
y = 60;}
Run Code Online (Sandbox Code Playgroud)
(第 54 版)
craft = new Craft();
Run Code Online (Sandbox Code Playgroud)
(同性恋 9)
add(new Board());
Run Code Online (Sandbox Code Playgroud)
(同性恋 19)
new Gayme();
Run Code Online (Sandbox Code Playgroud)
我有一些真正需要解决的问题,而我睡眠不足的大脑却在每个问题上都出现了问题。随时为您喜欢的任何游戏提供帮助。非常感谢你们!
有3种方法:
关于使用位于以下位置的 Jar 文件和资源的一些注意事项:
JVM 区分大小写,因此文件和包名称区分大小写。即主类位于mypackage 中,我们现在无法使用以下路径提取它:myPackAge
任何句号“.” 位于包名内的应替换为“/”
如果名称以“/”(“\u002f”)开头,则资源的绝对名称是“/”后面的名称部分。执行类时资源名称以/开头,资源在不同的包中。
让我们使用我的首选方法将其进行测试,getResource(..)该方法将返回我们资源的 URL:
我创建了一个包含 2 个包的项目:org.test和my.resources:

正如您所看到的,我的图像在my.resources 中,而持有的 Main 类main(..)在org.test 中。
主.java:
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Main {
public static final String RES_PATH = "/my/resources";//as you can see we add / to the begining of the name and replace all periods with /
public static final String FILENAME = "Test.jpg";//the case sensitive file name
/*
* This is our method which will use getResource to extarct a BufferedImage
*/
public BufferedImage extractImageWithResource(String name) throws Exception {
BufferedImage img = ImageIO.read(this.getClass().getResource(name));
if (img == null) {
throw new Exception("Input==null");
} else {
return img;
}
}
public static void main(String[] args) {
try {
BufferedImage img = new Main().extractImageWithResource(RES_PATH + "/" + FILENAME);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用RES_PATH或FILENAME不对实际文件进行适当更改的名称,您将得到一个异常(只是向您展示我们必须对路径多加小心)
更新:
对于您的具体问题,您有:
ImageIcon ii = new ImageIcon(this.getClass().getResource("craft.png"));
Run Code Online (Sandbox Code Playgroud)
它应该是:
ImageIcon ii = new ImageIcon(this.getClass().getResource("/resources/craft.png"));
Run Code Online (Sandbox Code Playgroud)
在Alien和其他类也需要改变。