Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图像错误_Java - Fatal编程技术网

Java 图像错误

Java 图像错误,java,Java,我最近完成了我正在制作的一个游戏的基础,我打算把它发送给一些朋友,但是每当他们打开.jar时,它只是一个灰色的窗口。当我听说这是因为我获取图像的方式(我使用了完整路径:C:\Users\etc)。我在谷歌上搜索了一下,找到了一种更有效的获取图像的方法 private static Image[] mobImages = new Image[1]; public static void loadImages() { mobImages[1] = Handler.loadImage("

我最近完成了我正在制作的一个游戏的基础,我打算把它发送给一些朋友,但是每当他们打开.jar时,它只是一个灰色的窗口。当我听说这是因为我获取图像的方式(我使用了完整路径:C:\Users\etc)。我在谷歌上搜索了一下,找到了一种更有效的获取图像的方法

private static Image[] mobImages =  new Image[1];

public static void loadImages()
{
     mobImages[1] = Handler.loadImage("res/EnemyLv1.png");
}

public static Image getMobImages(int index)
{
     return mobImages[index];
}
这就是我想用的。但我做到了这一点,并修改了其余代码以支持这一点。每当我玩游戏的时候,我都会犯一些错误。所有这些都指向

这: 如果(getBounds().intersects(tempForeign.getBounds()))

所以我也可能是通过这种方式得到这些图像的。我怎样才能解决这个问题?有没有更好的方法来获取图像?我试过一些,但都不管用

编辑:我终于解决了所有的错误唯一的问题是没有图像出现。再来一次。还要帮忙吗?那太棒了!感谢大家迄今为止的支持

您的代码仍然使用敌方.Java中的“C:\Users\Kids\Desktop\Java Game\Cosmic defence\res\EnemyLv2.png”。你确定这个存在吗?如果你移动了宇宙防御文件夹,它不会


(您正在谈论将绝对路径更改为相对路径,因此这可能是您的问题)

很难说代码中出了什么问题。但是,我建议您将图像文件放入java项目的一个包中(因此它们将是JAR文件的一部分),并使用Class.getResource()/Class.getResourceAsStream()访问它们。这样可以避免多个陷阱,并将所有内容保持在一起

如何将图像组织到软件包中的示例:

myproject
图像
ImageLocator.class
MyImage1.jpg
MyImage2.jpg

然后,ImageLocator类需要使用相对路径(仅图像名称+扩展名)来访问资源

public class ImageLocator {
    public final static String IMAGE_NAME1 = "MyImage1.jpg";

    public static Image getImage(final String name) {
        URL url = ImageLocator.class.getResource(name);
        Image image = Toolkit.getDefaultToolkit().createImage(url);
        // ensure the image is loaded
        return new ImageIcon(image).getImage();            
    }
}

这可以做得更优雅,但这应该让你开始。在ImageLocator类中将图像名称定义为常量可避免在整个项目中传播具体路径(只要ImageLocator中的名称正确,编译器将检查所有其他内容)

部分原因可能是您的代码在大小为1的数组中指向“1”的索引,这意味着唯一可用的索引实际上是“0”


尝试
mobImages[0]=Handler.loadImage(“res/EnemyLv1.png”)

您到底会遇到什么错误?知道这一点会使调试变得容易得多。好吧,当游戏开始时,背景会被画出来,玩家也会被画出来,但是你不能移动,敌人也不会出现。此错误表示:线程“AWT-EventQueue-0”java.lang.NullpointerException中出现异常我猜您会遇到NullpointerException。但是我们需要更多关于1的信息。例外情况和2。Handler.loadImage做什么。提示:我们需要代码,谢谢!好的,那么我会为每个新图像创建一个新的getImage方法?另外,我将如何参考这些图像?因为我是在getBounds()方法中这样做的。ImageLocator.getImage(ImageLocator.IMAGE_NAME1)将得到图像#1。您只需为ImageLocator中的每个图像定义一个新名称。为了获得最佳性能,我将通过此方法加载所有图像一次,然后将它们缓存在某个位置。当然,应该选择name常量,这样当我输入getResourceURL(name)时,名称就会告诉我图像是什么(比如image\u ENEMY1、image\u PLAYER等等);它说我需要创建一个方法?我的错,从我的代码库复制了代码,但没有看到getResource()在类上,而不是对象本身。修复了代码示例。它不会解决整个问题,但肯定会是它不起作用的部分原因。是的,尝试了它,它没有解决整个问题,但至少我知道我正在取得进展。控制台指向我的checkCollisions方法。有人能检查一下我的代码并帮我解决这个问题吗?