timer - How to properly access values from Queue using Iterator in Java? -


i used queue in adding values x , y coordinates of clicked mouse. however, got error when try access values using iterator. can me? how do right way? also, don't know timer , actionlistener code (are needed or have remove this?) little explanation useful me. hope me fix , improve these codes. thanks! :)

public class canvas extends jpanel implements mouselistener, actionlistener{  timer time; int numberofpoints; queue<integer> x = new linkedlist<integer>(); queue<integer> y = new linkedlist<integer>(); iterator itx = x.iterator(); iterator ity = y.iterator(); public canvas(){     addmouselistener(this);     time = new timer(1, this);     time.start();            numberofpoints = 5;  }  public void paint (graphics g){     super.paint(g);     graphics2d g2d = (graphics2d) g;     g2d.setbackground(color.black);     g2d.drawstring("left: "+ numberofpoints, 10, 20);     g2d.filloval(220, 170, 30, 30);     g2d.setcolor(color.red);         while(itx.hasnext()){         integer xx = (integer) itx.next();         integer yy = (integer) ity.next();         g2d.filloval(xx, yy, 30, 30);     } }  public void mousepressed(mouseevent e) {             if(numberofpoints>0){         numberofpoints--;         x.add(e.getx()-15);         y.add(e.gety()-15);         repaint();     }  }  public void mousereleased(mouseevent e) {}  public void mouseclicked(mouseevent e) {}  public void mouseentered(mouseevent e) {}  public void mouseexited(mouseevent e) {}  @override public void actionperformed(actionevent arg0) {     repaint();  } 

}

anyway, here's main class in case want run it.

public class clikkpanikk extends jframe{  public clikkpanikk(){     short width = 500;     short height = 400;     add(new canvas());     settitle("clikkpanikk");     setvisible(true);     setsize(width, height);     setresizable(false);     setlocationrelativeto(null);     setdefaultcloseoperation(exit_on_close); }  public static void main(string[] args) {     new clikkpanikk(); } 

}

you creating iterator field rather before use. because of this, iterator notices values have changed since created , throws concurrent modification exception.

initialize iterator before while loop like:

itx = x.iterator(); ity = y.iterator(); while(itx.hasnext()){     integer xx = (integer) itx.next();     integer yy = (integer) ity.next();     g2d.filloval(xx, yy, 30, 30); } 

also, out of context may wrong (i haven't gone through of code), shouldn't need cast integer object can set integer object primitive int type:

integer varname = 12; 

will create integer object of value 12, unnecessary casting leaves room compiler miss fatal errors.


Comments

Popular posts from this blog

user interface - How to replace the Python logo in a Tkinter-based Python GUI app? -

objective c - Greedy NSProgressIndicator Allocation -

how to set an OCR language in Google Drive -