indexoutofboundsexception - Java: IndexOutOfBounds exception and eventDispatch -


i apologize if title not descriptive of issue i'm having. i'm developing testing gui simple gui calculator. test gui allow user click on components of calculator gui in order record them. , start putting values in components test calculator's functionality.

essentially, set 3 classes mylistener, threadrunner , testgui. testgui has 2 buttons, 1 user can click on calculator jtextfields , record them using methods in threadrunner has arraylist store jtextfields , other variables store other components. other button set values jtextfields stored in arraylist through method in testrunner. problem i'm having when click second button set new values exception indexoutofbounds along other ones. i've been banging head against wall trying figure out past couple of days, much appreciated. thank you!

public class threadrunner extends thread { //chooseinput ci = new chooseinput(); //list<string> inputval = ci.getinput();  list<jtextfield> listoftextfields = new arraylist<>(); jtextfield output; jbutton gobutton;  public void getinputfield(jtextfield a) {     listoftextfields.add(a);     system.out.println("getinput func. in thread runner works");     //system.out.println(a);     system.out.print(listoftextfields.get(0)); }  public void getoutputfield(jtextfield a) {     output = a; }  public void getbutton(jbutton a) {     gobutton = a; }  public void go() {     (int = 0; < 2; i++) { // test if go() can access listoftextfields         system.out.print(listoftextfields.get(i));     }     listoftextfields.get(0).settext("10");     listoftextfields.get(1).settext("20");     system.out.println("func go() works"); } }   public class mylistener implements awteventlistener { threadrunner t = new threadrunner(); public mylistener(threadrunner t) {     t = t; }  @override public void eventdispatched(awtevent event) {      if (event.paramstring().substring(0, 13).equals("mouse_clicked")) {         system.out.println("click happens");         object o = event.getsource();         if (o.getclass().equals(jtextfield.class)) {             jtextfield tf = (jtextfield) o;             if (tf.iseditable()) {                 t.getinputfield(tf);                 system.out.println("tr shpuld have field");             } else {                 t.getoutputfield(tf);             }         }          if (o.getclass().equals(jbutton.class)) {             jbutton jb = (jbutton) o;             t.getbutton(jb);         }     } } }  public class testgui {  public testgui() {     final threadrunner tr = new threadrunner();     final mylistener ml = new mylistener(tr);     jframe f1 = new jframe();     jbutton b1 = new jbutton("get locations");     jbutton b2 = new jbutton("test");     f1.setvisible(true);     f1.setsize(500, 200);      f1.getcontentpane().add(b1, borderlayout.north);     f1.getcontentpane().add(b2, borderlayout.south);      b1.setvisible(true);     b2.setvisible(true);      b1.addactionlistener(new actionlistener() {          public void actionperformed(actionevent ae) {             mygui gui = new mygui();             gui.setsize(500, 300);             gui.setvisible(true);             gui.setlocation(200, 200);              toolkit tk = toolkit.getdefaulttoolkit();              tk.addawteventlistener(ml, awtevent.mouse_event_mask);         }     }     );      b2.addactionlistener(new actionlistener() {          public void actionperformed(actionevent ae) {             tr.go();         }     }     ); } } 

the error produced when go() method in threadrunner invoked stacktrace:

run: 

click happens click happens getinput func. in thread runner works javax.swing.jtextfield[,103,12,249x41,layout=javax.swing.plaf.basic.basictextui$updatehandler,alignmentx=0.0,alignmenty=0.0,border=javax.swing.plaf.borderuiresource$compoundborderuiresource@b97bc3,flags=296,maximumsize=,minimumsize=,preferredsize=,caretcolor=sun.swing.printcoloruiresource[r=51,g=51,b=51],disabledtextcolor=javax.swing.plaf.coloruiresource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.insetsuiresource[top=0,left=0,bottom=0,right=0],selectedtextcolor=sun.swing.printcoloruiresource[r=51,g=51,b=51],selectioncolor=javax.swing.plaf.coloruiresource[r=184,g=207,b=229],columns=0,columnwidth=0,command=,horizontalalignment=leading]tr shpuld have field click happens getinput func. in thread runner works javax.swing.jtextfield[,103,12,249x41,layout=javax.swing.plaf.basic.basictextui$updatehandler,alignmentx=0.0,alignmenty=0.0,border=javax.swing.plaf.borderuiresource$compoundborderuiresource@b97bc3,flags=296,maximumsize=,minimumsize=,preferredsize=,caretcolor=sun.swing.printcoloruiresource[r=51,g=51,b=51],disabledtextcolor=javax.swing.plaf.coloruiresource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.insetsuiresource[top=0,left=0,bottom=0,right=0],selectedtextcolor=sun.swing.printcoloruiresource[r=51,g=51,b=51],selectioncolor=javax.swing.plaf.coloruiresource[r=184,g=207,b=229],columns=0,columnwidth=0,command=,horizontalalignment=leading]tr shpuld have field exception in thread "awt-eventqueue-0" java.lang.indexoutofboundsexception: index: 0, size: 0 click happens @ java.util.arraylist.rangecheck(arraylist.java:653) @ java.util.arraylist.get(arraylist.java:429) @ threadrunner.go(threadrunner.java:43) @ testgui$2.actionperformed(testgui.java:55) @ javax.swing.abstractbutton.fireactionperformed(abstractbutton.java:2022) @ javax.swing.abstractbutton$handler.actionperformed(abstractbutton.java:2346) @ javax.swing.defaultbuttonmodel.fireactionperformed(defaultbuttonmodel.java:402) @ javax.swing.defaultbuttonmodel.setpressed(defaultbuttonmodel.java:259) @ javax.swing.plaf.basic.basicbuttonlistener.mousereleased(basicbuttonlistener.java:252) @ java.awt.component.processmouseevent(component.java:6525) @ javax.swing.jcomponent.processmouseevent(jcomponent.java:3324) @ java.awt.component.processevent(component.java:6290) @ java.awt.container.processevent(container.java:2234) @ java.awt.component.dispatcheventimpl(component.java:4881) @ java.awt.container.dispatcheventimpl(container.java:2292) @ java.awt.component.dispatchevent(component.java:4703) @ java.awt.lightweightdispatcher.retargetmouseevent(container.java:4898) @ java.awt.lightweightdispatcher.processmouseevent(container.java:4533) @ java.awt.lightweightdispatcher.dispatchevent(container.java:4462) @ java.awt.container.dispatcheventimpl(container.java:2278) @ java.awt.window.dispatcheventimpl(window.java:2750) @ java.awt.component.dispatchevent(component.java:4703) @ java.awt.eventqueue.dispatcheventimpl(eventqueue.java:751) @ java.awt.eventqueue.access$500(eventqueue.java:97) @ java.awt.eventqueue$3.run(eventqueue.java:702) @ java.awt.eventqueue$3.run(eventqueue.java:696) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(protectiondomain.java:75) @ java.security.protectiondomain$1.dointersectionprivilege(protectiondomain.java:86) @ java.awt.eventqueue$4.run(eventqueue.java:724) @ java.awt.eventqueue$4.run(eventqueue.java:722) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(protectiondomain.java:75) @ java.awt.eventqueue.dispatchevent(eventqueue.java:721) @ java.awt.eventdispatchthread.pumponeeventforfilters(eventdispatchthread.java:201) @ java.awt.eventdispatchthread.pumpeventsforfilter(eventdispatchthread.java:116) @ java.awt.eventdispatchthread.pumpeventsforhierarchy(eventdispatchthread.java:105) @ java.awt.eventdispatchthread.pumpevents(eventdispatchthread.java:101) @ java.awt.eventdispatchthread.pumpevents(eventdispatchthread.java:93) @ java.awt.eventdispatchthread.run(eventdispatchthread.java:82)

the problem here used

threadrunner t = new threadrunner(); public mylistener(threadrunner t) {     t = t; } 

which assigns argument instead of local variable defined above. using this explicitly specify d'like reference instance variable t instead of argument. either use

threadrunner t = new threadrunner(); public mylistener(threadrunner t) {     this.t = t; } 

or rename class variable name, e.g.

threadrunner ct = new threadrunner(); public mylistener(threadrunner t) {     ct = t; } 

Popular posts from this blog