im gettingt the Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException -
this question has answer here:
- what nullpointerexception, , how fix it? 12 answers
console says:
exception in thread "awt-eventqueue-1" java.lang.nullpointerexception
@ funk.versuch2$fparser.pruefe(versuch2.java:148)
@ funk.plotter2.werteaus(plotter2.java:106)
@ funk.plotter2.actionperformed(plotter2.java:80)
@ java.awt.button.processactionevent(unknown source)
@ java.awt.button.processevent(unknown source)
@ java.awt.component.dispatcheventimpl(unknown source)
@ java.awt.component.dispatchevent(unknown source)
@ java.awt.eventqueue.dispatcheventimpl(unknown source)
@ java.awt.eventqueue.access$500(unknown source)
@ java.awt.eventqueue$3.run(unknown source)
@ java.awt.eventqueue$3.run(unknown source)
@ java.security.accesscontroller.doprivileged(native method)
@ java.security.protectiondomain$1.dointersectionprivilege(unknown source)
@ java.security.protectiondomain$1.dointersectionprivilege(unknown source)
@ java.awt.eventqueue$4.run(unknown source)
@ java.awt.eventqueue$4.run(unknown source)
@ java.security.accesscontroller.doprivileged(native method)
@ java.security.protectiondomain$1.dointersectionprivilege(unknown source)
@ java.awt.eventqueue.dispatchevent(unknown source)
@ java.awt.eventdispatchthread.pumponeeventforfilters(unknown source)
@ java.awt.eventdispatchthread.pumpeventsforfilter(unknown source)
@ java.awt.eventdispatchthread.pumpeventsforhierarchy(unknown source)
@ java.awt.eventdispatchthread.pumpevents(unknown source)
@ java.awt.eventdispatchthread.pumpevents(unknown source)
@ java.awt.eventdispatchthread.run(unknown source)
it show me lines go 0 not able fix it. syntax pretty new java wanted try out function parser working doesn't draw function enter in textfield.
package funk; import funk.versuch2.fparser; import funk.versuch2.frechner; import java.applet.applet; import java.awt.button; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.label; import java.awt.panel; import java.awt.textfield; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.keyevent; import java.awt.event.keylistener; public class plotter2 extends applet implements actionlistener,keylistener { int breite, hoehe; //maße des applets panel poben; //komponenten button bstart; textfield teingabe; label lfehler; int x0, y0, dx, dy; //bestimmende größen für das koordinatensystem string eingabe; //das wird der funktionsterm boolean eingabeok = false; boolean ersterpunkt = true; fparser p = new fparser(); //der syntaxchecker frechner r = new frechner(); // der rechner public void init() { breite = getbounds().width; //appletmaße bestimmen hoehe = getbounds().height; poben = new panel(); //komponenten erzeugen poben.setbounds(0, 0, breite - 1, 60); poben.setlayout(null); add(poben); bstart = new button("los!"); bstart.setbounds(120, 2, 60, 20); bstart.addactionlistener(this); poben.add(bstart); teingabe = new textfield("y="); teingabe.setbounds(2, 2, breite - 60, 22); teingabe.addkeylistener(this); teingabe.setfont(new font("couruier", 1, 12)); poben.add(teingabe); lfehler = new label("ok"); lfehler.setbounds(55, 25, breite - 60, 20); poben.add(lfehler); x0 = 4; //mittelpunkte des koordinatensystems und skalierungsfaktoren festlegen y0 = (int) math.round((hoehe - 60) / 2) + 60; dx = 100; dy = 50; } //zuerst einmal muss ein leeres koordinatensystem gezeichnet werden: private void anfangsbild(graphics g) { g.setcolor(color.white); //bild löschen g.fillrect(1, 61, breite - 2, hoehe - 62); g.setcolor(color.black); g.drawrect(1, 61, breite - 2, hoehe - 62); g.drawline(1, y0, breite - 1, y0); //achsen zeichnen g.drawline(x0, 61, x0, hoehe - 1); (int = 1; <= (int) math.round(breite / dx); i++) //x-achse skalieren { g.drawline(x0 - dx * i, y0 - 2, x0 - dx * i, y0 + 2); g.drawline(x0 + dx * i, y0 - 2, x0 + dx * i, y0 + 2); } (int = 1; <= (int) math.round(y0 / dy); i++) //y-achse skalieren { g.drawline(x0 - 2, y0 + dy * i, x0 + 2, y0 + dy * i); g.drawline(x0 - 2, y0 - dy * i, x0 + 2, y0 - dy * i); } } public void actionperformed(actionevent e) { werteaus(); } public void keyreleased(keyevent e) { if (e.getkeycode() == 10) werteaus(); } private void werteaus() { eingabe = teingabe.gettext(); boolean allesok = true; try //ggf. “y=” abschneiden { if (eingabe.substring(0, 2).equals("y=")) eingabe = eingabe.substring(2); } catch (exception ex) { lfehler.settext("fehler: eingabe zu kurz!"); allesok = false; } if (eingabe.length() > 0) //ggf. semikolon anhängen { if (!(eingabe.charat(eingabe.length() - 1) == ';')) eingabe = eingabe + ";"; } else allesok = false; allesok = allesok && fparser.pruefe(eingabe); //syntaxcheck if (allesok) { lfehler.settext("eingabe ok --> es wird gezeichnet"); eingabeok = true; repaint(); //graph zeichnen lfehler.settext("ok"); } else { lfehler.settext("fehler"); eingabeok = false; } } public void paint(graphics g) { int yalt = 0, yneu; anfangsbild(g); if (eingabeok) { double x, y; (int = 0; < breite - 1; i++) //alle horizontalen bildschirmkoordinaten durchlaufen { x = 1.0 * (i - x0) / dx; //x-wert bestimmen y = r.berechne(eingabe, x); //y-wert berechnen if (!r.fehler) { if (ersterpunkt) { yalt = y0 - (int) math.round(y * dy); //position merken ersterpunkt = false; } else { yneu = y0 - (int) math.round(y * dy); //linie zeichnen if ((math.abs(yalt) < 2 * hoehe) && (math.abs(yneu) < 2 * hoehe)) g.drawline(i - 1, yalt, i, yneu); yalt = yneu; } } else ersterpunkt = true; } } } @override public void keypressed(keyevent e) { // todo auto-generated method stub } @override public void keytyped(keyevent e) { // todo auto-generated method stub } }
the other one:
package funk; import java.applet.applet; import java.awt.button; import java.awt.font; import java.awt.label; import java.awt.textfield; import java.awt.event.actionevent; import java.awt.event.actionlistener; public class versuch2 extends applet implements actionlistener { static textfield teingabe; label lanzeige; public void init() { setsize(800, 400); setlayout(null); button bneu = new button("neu"); // ein button für den neustart bneu.setbounds(2, 2, 50, 20); bneu.addactionlistener(this); add(bneu); button barbeite = new button("analysiere"); // und einer für ersetzungsvorgänge barbeite.setbounds(55, 2, 60, 20); barbeite.addactionlistener(this); add(barbeite); teingabe = new textfield(""); // zum eingeben eines wortes teingabe.setbounds(2, 30, 790, 25); teingabe.setfont(new font("courier", 1, 16)); add(teingabe); lanzeige = new label("geben sie eine variablenvereinbarung ein!"); lanzeige.setbounds(2, 60, 790, 20); add(lanzeige); } public void actionperformed(actionevent e) { if (e.getactioncommand() == "neu") neu(); else if (e.getactioncommand() == "analysiere") arbeite(); } private void neu() { teingabe.settext(""); lanzeige.settext("geben sie eine variablenvereinbarung ein!"); } private void arbeite() { string s = teingabe.gettext(); boolean ok = fparser.pruefe(s); } static class fparser { public static boolean pruefe(string s) // s wird überprüft { char c, d; // die ersten beiden zeichen boolean ok = true; // das ergebnis if (s.length() < 2) ok = false; while ((s.length() > 1) && ok) { c = s.charat(0); // erstes zeichen abtrennen s = s.substring(1); d = s.charat(0); // zweites zeichen vorsorglich speichern switch (c) { case '+': { s = "a" + s; break; } case '-': { s = "a" + s; break; } case '0': { s = "b" + s; break; } case '1': { s = "b" + s; break; } case '2': { s = "b" + s; break; } case '3': { s = "b" + s; break; } case '4': { s = "b" + s; break; } case '5': { s = "b" + s; break; } case '6': { s = "b" + s; break; } case '7': { s = "b" + s; break; } case '8': { s = "b" + s; break; } case '9': { s = "b" + s; break; } case 'x': { s = "e" + s; break; } case 'a': { s = s.substring(1); // jetzt kann das zweite zeichen auch weg if (d == 'x') s = "e" + s; else if ((d >= '0') && (d <= '9')) s = "b" + s; else ok = false; break; } case 'b': { s = s.substring(1); // jetzt kann das zweite zeichen auch weg if ((d == '+') || (d == '-')) s = "a" + s; else if (d == 'x') s = "e" + s; else if ((d >= '0') && (d <= '9')) s = "b" + s; else if (d == ';') s = "s" + s; else ok = false; break; } case 'e': { s = s.substring(1); // jetzt kann das zweite zeichen auch weg if ((d == '+') || (d == '-')) s = "a" + s; else if (d == '^') s = "f" + s; else if (d == ';') s = "s" + s; else ok = false; break; } case 'f': { s = s.substring(1); // jetzt kann das zweite zeichen auch weg if ((d == '+') || (d == '-')) s = "g" + s; else if ((d >= '0') && (d <= '9')) s = "h" + s; else if (d == '^') s = "f" + s; else ok = false; break; } case 'g': { s = s.substring(1); // jetzt kann das zweite zeichen auch weg if ((d >= '0') && (d <= '9')) s = "h" + s; else ok = false; break; } case 'h': { s = s.substring(1); // jetzt kann das zweite zeichen auch weg if ((d == '+') || (d == '-')) s = "a" + s; else if (d == ';') s = "s" + s; else if ((d >= '0') && (d <= '9')) s = "h" + s; else ok = false; break; } } } string s1 = teingabe.gettext(); if (ok == true) { teingabe.settext("richtig--> " + s1); } else { teingabe.settext("error--> " + s1); } return ok && (s1.equals("s")); } } static class frechner { boolean fehler = false; public double berechne(string s, double x) { char c; double y = 0, ergebnis = 0; int vorzeichen = 1; // vorzeichen double zahl = 1; double exponent = 1; while ((s.length() > 1) && !fehler) { // zahl zusammensuchen c = s.charat(0); s = s.substring(1); // erstes zeichen abschneiden vorzeichen = 1; zahl = 1; if (c == '-') { // ggf. vorzeichen bestimmen vorzeichen = -1; c = s.charat(0); s = s.substring(1); // nächstes zeichen abschneiden } else if (c == '+') { c = s.charat(0); s = s.substring(1); // nächstes zeichen abschneiden } if ((c >= '0') && (c <= '9')) { // kommt ´ne zahl? zahl = (int) c - (int) '0'; c = s.charat(0); s = s.substring(1); // nächstes zeichen abschneiden while ((c >= '0') && (c <= '9')) { zahl = 10 * zahl + (int) c - (int) '0'; c = s.charat(0); s = s.substring(1); // nächstes zeichen abschneiden } } zahl = vorzeichen * zahl; // das ist doch schon mal was! if ((c == '+') || (c == '-') || (c == ';')) { // jetzt kommt ein neuer summand ergebnis = ergebnis + zahl; s = "" + c + s; // vorzeichen wieder vorne anhängen } if (c == 'x') { // der parameter wird benutzt // exponent suchen c = s.charat(0); s = s.substring(1); // <x> abschneiden if ((c == ';') || (c == '+') || (c == '-')) { // x^1 ergebnis = ergebnis + zahl * x; s = "" + c + s; } else { c = s.charat(0); s = s.substring(1); // <^> abschneiden vorzeichen = 1; exponent = 1; if (c == '-') { vorzeichen = -1; c = s.charat(0); s = s.substring(1); // nächstes zeichen abschneiden } else if (c == '+') { c = s.charat(0); s = s.substring(1); // nächstes zeichen abschneiden } if ((c >= '0') && (c <= '9')) { exponent = (int) c - (int) '0'; c = s.charat(0); s = s.substring(1); // nächstes zeichen abschneiden while ((c >= '0') && (c <= '9')) { exponent = 10 * exponent + (int) c - (int) '0'; c = s.charat(0); s = s.substring(1); // nächstes zeichen abschneiden } exponent = vorzeichen * exponent; s = "" + c + s; // vorzeichen wieder vorne anhängen fehler = false; try { // wert des summanden berechnen y = zahl * math.exp(exponent * math.log(x)); ergebnis = ergebnis + y; } catch (exception ex) { fehler = true; } } } } } return ergebnis; } } }
and relevant lines are: "versuch2"
string s1 = teingabe.gettext(); if (ok == true) { teingabe.settext("richtig--> " + s1); } else { teingabe.settext("error--> " + s1); }
"plotter2"
if (!(eingabe.charat(eingabe.length()-1)==';')) eingabe = eingabe + ";"; } else allesok = false; allesok = allesok && fparser.pruefe(eingabe); //syntaxcheck
"plotter2"
public void actionperformed(actionevent e) { werteaus(); } public void keyreleased(keyevent e) { if (e.getkeycode() == 10) werteaus(); }
the teingabe
field of versuch2
class (class names should start in uppercase btw.) isn't initialized. init()
method of versuch2
class isn't called because isn't start point of applet, applet plotter2
(again, class names should start upper case). means versuch2.teingabe
still null
, code teingabe.gettext();
fail.
you should consider remove code teingabe
pruefe()
method.
Comments
Post a Comment