java中制作的小游戏生成的jar文件不能显示图片

博主最近在设计一个游戏,叫做21点,有兴趣的读者可以去网上查一下,这是游戏的截图

 

这个游戏跟我们讨论的主题有什么关系呢?我们都知道,在游戏设计中最重要的就是图片的显示问题,我在设计这个游戏的时候有2个问题:

1.图片存放在什么位置?

2.图片的读取是以什么样的方式?

首先我们来看第二个问题,一般在java里面读取图片的方式有很多种,但是在游戏中最常见的还是这个方式:

Image img =Toolkit.getDefaultToolkit().getImage("images\\xxx.jpg");

然后将图片显示在面板上的语句是:

        g.drawImage(cardImage, x, y, (ImageObserver)p);

这样的方式本身没什么问题,不过还是需要结合第一个问题来讨论,这里运用的是相对路径,就是说必须在项目中新建一个文件夹,并命名为images,这里所说的相对其实是相对于类文件来说的,类文件在读取图片的时候如果项目下面没有Images文件夹肯定会报错,所以在eclipse中只要加上了这个文件夹,并把相应的图片放在下面是不会有什么问题的,最后的运行结果确实如图所示。

但是,当我们将项目打包成jar文件时,却没有这么幸运了,项目打包之后就是这个样子:


这样子有什么问题呢?我们运行这个jar文件的时候,就是这个样子:



 

根本就看不到牌面,然而当我们将images文件夹复制粘贴到jar文件并列时,look


 

      居然又能够显示图片了,这就是博主百思不得其解的地方,按理说在jar包中已经包含了类文件,并且类文件也和Iamges在同一个文件夹下面,但是这些类文件反而读取不到jar包中的iamges,偏偏可以读取到jar包外面的images,所以这个地方我也没有搞懂。

      其实问题到了这个地方已经解决了,但是为了不影响使用,总不能每次做一个游戏之后,都要在生成jar文件之后,再把images文件夹复制到和jar文件并列,那么有没有什么办法可以使得只需要生成一个jar文件,该jar文件就可以直接运行,而不用在去复制图片过。

      答案是可以!

怎么做呢?只需要把那么些个图片直接和类文件放在一起,也就是放在.java文件那里,就是包中。但是问题来了,把图片放到包中之后怎么读取呢?还能用之前的

Image img =Toolkit.getDefaultToolkit().getImage("images\\xxx.jpg");

吗?显然是不行的,就算改变一下路径

Image img =Toolkit.getDefaultToolkit().getImage("xxx.jpg");

也是不行的,为啥不行这里我也不太清楚原理,反正运行的时候就是没有。所以这里就用到了另外一种方式

    URL url=getClass().getResource("s1.gif");

    ImageIcon imageIcon=new ImageIcon(url);

    Image image=imageIcon.getImage();

这个是啥玩意其实我也不是很懂,但是这里面有个方法确实非常有效:

getClass().getResource("s1.gif");

有了这个之后,就可以直接把所有的图片全部放在类文件下面,然后就再生成jar文件之后就可以直接显示所有的图片了,而不用再次复制粘贴。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值