swing - Exception in thread, java.lang.NullPointerException -
i have been searching answer 2 days now, didn't seem solve much. because don't understand causing error in first place, nor know how go fixing problem.
i've been trying make "animation" of sorts, 1 of layers in spawn circles on right side of screen , send them left on time. problem every time meant spawn circle, doesn't appear , error.
exception in thread "thread-4" java.lang.nullpointerexception @ ball.draw(ball.java:39) @ ball.run(ball.java:23) here class causing errors:
import java.awt.color; import java.awt.dimension; import java.awt.graphics; import java.util.random; import javax.swing.jpanel; public class ball extends thread{ jpanel drawingpanel; private int x=400,y=200; private int dx=-2,dy=0; private static final int xsize=10,ysize=10; random rdm = new random(); int y_rdm = rdm.nextint(440)+30; public ball(jpanel jp){ drawingpanel=jp; dx-=1; } public void run(){ draw(); (int i=0;i<1000;i++){ try{ thread.sleep(10); } catch(interruptedexception e){} move(); } } private void move(){ erase(); changepos(); draw(); } private void draw(){ graphics g = drawingpanel.getgraphics(); g.setcolor(color.white); g.filloval(x,y_rdm,xsize,ysize); g.dispose(); } private void erase(){ graphics g=drawingpanel.getgraphics(); g.setcolor(drawingpanel.getbackground()); g.filloval(x,y_rdm,xsize,ysize); g.dispose(); } private void changepos(){ x+=dx;y_rdm+=dy; } } import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jpanel; import javax.swing.timer; public class ballpanel extends jpanel implements actionlistener{ jpanel drawingpanel = new jpanel(); public ballpanel(){ int delay = 300; actionlistener taskperformer = new actionlistener() { public void actionperformed(actionevent evt) { ball b= new ball(drawingpanel); b.start(); } }; new timer(delay, taskperformer).start(); } @override public void actionperformed(actionevent e) { } } import java.awt.borderlayout; import java.awt.color; import java.io.inputstream; import java.net.url; import javax.swing.jframe; import javax.swing.jlayeredpane; import javax.swing.jpanel; import javazoom.jl.player.player; public class window extends jframe{ private jlayeredpane layerpane; private jpanel up, down; public window(){ layerpane = new jlayeredpane(); down = new jpanel(); down.setbounds(0, 0, 450, 450); down.setbackground(new color(0, 51, 102)); layerpane.add(down, new integer(1)); ballpanel bp = new ballpanel(); layerpane.add(bp, new integer(2)); bp.setbounds(0, 0, 450, 450); bp.setopaque(!bp.isopaque()); animation2 ani2 = new ani2(); ani2.setbounds(0, 0, 400, 450); layerpane.add(ani2, new integer(3)); ani2.setopaque(!ani2.isopaque()); getcontentpane().add(layerpane, borderlayout.center); } public static void main(string args[]){ jframe f = new window(); f.setvisible(true); f.setsize(450,450); f.setdefaultcloseoperation(jframe.exit_on_close); try{ url url = new url("file:///c://song.mp3"); inputstream in = url.openstream(); player pl = new player(in); pl.play(); } catch(exception e){ e.printstacktrace(); } } } please tell me if need include other classes, seem irrelevant.
the getgraphics method of jcomponent returns graphics object associated component. if there no graphics object associated return null, case in code.
a component associated graphics object when added container associated one, or if top-level container (jframe, jdialog, , japplet).
your problem here jpanel not contained inside top-level container, associated graphics object null.
to fix problem, either make sure have added jpanel top-level container before call getgraphics() on it, or instead extend jpanel , override paintcomponent(graphics g) method drawing (second option preferred since paintcomponent method called automatically whenever parent container needs redrawn (e.g. if resized, or blocked , unblocked other window, ...)).
(by way, in ballpanel class extends jpanel, define new jpanel , pass ball's constructor. should passing this the constructor, since drawingpanel never added container, ballpanel instance is. doesn't make sense define jpanel field inside class jpanel , have field job class supposed do.)
Comments
Post a Comment