swing - Ghost Exceptions: Java exceptions on empty lines -
swing - Ghost Exceptions: Java exceptions on empty lines -
well, trying create interface calculator. @ point, have 1 button, greeting label, , label become main line of calculator. when run code, window opens , greeting displayed, button seen. terminal displays:
exception in thread "main" java.lang.error: unresolved compilation problem: cannot utilize in static context @ components.interface.buttons(interface.java:45) @ components.interface.main(interface.java:60)
the thing is, if there no code on lines 45 , 60, java still throws exception lines. why doing this? code below:
package components; import java.awt.event.*; import java.awt.*; import javax.swing.*; public class interface { public static void main(string[] args) { // todo auto-generated method stub jframe frame; jpanel text = new jpanel(); jpanel controlpanel = new jpanel(); jlabel digits = new jlabel(""); frame = new jframe("calculator"); frame.setlayout(new flowlayout()); frame.setpreferredsize(new dimension(300, 400)); frame.addwindowlistener(new windowadapter() { public void windowclosing(windowevent windowevent) { system.exit(0); } }); frame.add(text); frame.add(controlpanel); frame.setvisible(true); frame.pack(); //about line 45 digits.setborder(borderfactory.createlineborder(color.black)); digits.setsize(new dimension(30, 20)); text.add(digits); jlabel greet = new jlabel("welcome calculator!"); greet.setsize(30, 20); greet.setverticalalignment(swingconstants.top); greet.setborder(borderfactory.createlineborder(color.black)); text.add(greet); //about line 60 jbutton 1 = new jbutton("1"); one.setsize(100, 30); one.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { digits.settext("1"); } }); controlpanel.add(one); } }
your biggest error right you're trying run non-compilable code -- never this! instead find out problems compiler tells about, not jvm, , seek prepare them. seek run code after compiles without error.
the compiler warn you're trying utilize non-final local variable, digits, within anonymous inner class, , isn't allowed. solution declare digits final variable.
final jlabel digits = new jlabel ("");
you may inquire why unusual requirement exists, inner classes true classes, anonymous inner classes (like actionlistener) , when java creates one, makes copies of local variables used inner class, , passes these copies inner class. if variable not final, re-create can out of sync original.
java swing exception
Comments
Post a Comment