`
zkgale
  • 浏览: 99738 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

关于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。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics