关于createImage出现NullPointerException

这两天在搞一东东,里面有

img=createImage(imgwidth,imgheight);
  imgg=img.getGraphics();

这样的语句,可是会出现NullPointerException,下面的是我所找到最好的答案...

dz00H wrote:
Exception會印出呼叫堆疊裡的內容,並告訴你錯在第幾行,
以你的例子來講:

Exception in thread "main" java.lang.NullPointerException
at Move.<init>(Move.java:13)
at Move.main(Move.java:34)

是錯在Move物件的建構子中(在Move.java這個檔案的第13行),
然後我們可以去看看那裡出了什麼事:

offg = off.getGraphics();

java.lang.NullPointerException會出現的原因,是因為對著是null的物件作存取、操作
這一行裡唯一被操作的物件就是off了,所以我們可以知道
「因為off在這裡是null,所以出了這個java.lang.NullPointerException」

為什麼off會是null呢?
因為你用的createImage()方法,它並不是同步的方法。
也就是說,這個createImage並不會等到Image真正產生才繼續往下執行,
這其實是為了效率使然,最早這個方法是為了Applet存取網路資源時進行加速,
但是也造成相當多的困擾。

我建議你在這邊改用java.awt.image.BufferedImage,
它的建構子是公開的,你可以自己new一個出來作為DoubleBuffer。



off 變數的值是 null 不是因為 createImage() method 不是同步 method,而是一個 non-displayable 的 component,createImage 操作無法使用(因為無法在未成為 displayable 之前達成),在未成為 displayable 前,一個 component 的 createImage() method 只會傳回 null。

至於你提到使用到 image 時才會存取資源這個是 Image object 的特性,但是 createImage() 回傳的 image object 反而比較接近 BufferedImage,是直接 allocate 一塊記憶體來存放 pixel data。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值