Hallo! Beim Lösen meiner Hausaufgaben bin ich auf folgendes Problem gestoßen. Wir sollten eine Morsecode Anwendung programmieren, welche wie der Name schon sagt Morsecodes in Fließtext umwandeln:
Das sind die beiden Klassen. Beim Ausführen gibt es allerdings eine Null Pointer Exception bei diesem Teil:
Bitte um Hilfe oder Ratschläge wie ich dieses Problem lösen kann. Eigentlich müsste ich alle Objekte erstellt haben etc.
MfG
Java:
import sum.komponenten.*;
import sum.werkzeuge.*;
import sum.ereignis.*;
public class SuMAnwendung extends EBAnwendung
{
// Objekte
private Knopf hatKnopfCodieren;
private Knopf hatKnopfDecodieren;
private Knopf hatKnopfBeenden;
private Zeichenbereich hatZeichenbereich1;
private Zeichenbereich hatZeichenbereich2;
private Zeichenbereich hatZeichenbereich3;
private Etikett hatEtikettAusgangstext;
private Etikett hatEtikettMorsecode;
private Etikett hatEtikettDecodierterText;
private Etikett hatEtikettMorsecodierung;
private Textwerkzeug hatTW;
private Baum aktuellerBaum;
private Baum hatMorsebaum;
char lZeichen;
// Attribute
/**
* Konstruktor
*/
public SuMAnwendung()
{
//Initialisierung der Oberklasse
super(1075, 964);
hatKnopfCodieren = new Knopf(292, 580, 133, 36, "codieren");
hatKnopfCodieren.setzeBearbeiterGeklickt("hatKnopfCodierenGeklickt");
hatKnopfDecodieren = new Knopf(608, 581, 128, 35, "Decodieren");
hatKnopfDecodieren.setzeBearbeiterGeklickt("hatKnopfDecodierenGeklickt");
hatKnopfBeenden = new Knopf(433, 677, 173, 32, "Beenden");
hatKnopfBeenden.setzeBearbeiterGeklickt("hatKnopfBeendenGeklickt");
hatZeichenbereich1 = new Zeichenbereich(94, 213, 232, 341, "");
hatZeichenbereich2 = new Zeichenbereich(394, 213, 233, 339, "");
hatZeichenbereich3 = new Zeichenbereich(710, 213, 249, 342, "");
hatEtikettAusgangstext = new Etikett(94, 179, 100, 25, "Ausgangstext");
// Ausrichtung
hatEtikettAusgangstext.setzeAusrichtung(Ausrichtung.LINKS);
hatEtikettMorsecode = new Etikett(395, 179, 100, 25, "Morsecode");
// Ausrichtung
hatEtikettMorsecode.setzeAusrichtung(Ausrichtung.LINKS);
hatEtikettDecodierterText = new Etikett(709, 183, 100, 25, "Decodierter Text");
// Ausrichtung
hatEtikettDecodierterText.setzeAusrichtung(Ausrichtung.LINKS);
hatEtikettMorsecodierung = new Etikett(371, 38, 277, 69, "Morsecodierung");
// Ausrichtung
hatEtikettMorsecodierung.setzeAusrichtung(Ausrichtung.MITTE);
this.erzeugeMorsebaum();
hatTW = new Textwerkzeug();
}
/**
* Vorher: Ereignis GeklicktvonhatKnopfCodieren fand statt.
* Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
*/
public void hatKnopfCodierenGeklickt()
{
// Schreiben Sie hier den Text ihres Dienstes
}
/**
* Vorher: Ereignis GeklicktvonhatKnopfDecodieren fand statt.
* Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
*/
public void hatKnopfDecodierenGeklickt()
{
String lString;
//char lZeichen;
hatZeichenbereich3.loescheAlles();
lString = hatZeichenbereich2.inhaltAlsText();
for (int i = 1; i <= hatTW.laenge(lString); i++)
{
lZeichen = hatTW.zeichenAn(lString, i);
this.verarbeiteMorsezeichen(lZeichen);
}
}
/**
* Vorher: Ereignis GeklicktvonhatKnopfBeenden fand statt.
* Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
*/
public void hatKnopfBeendenGeklickt()
{
this.beenden();
}
/*public void erzeugeMorsebaum()
{
Baum lBaum1, lBaum2, lBaum3, lBaum4, lBaum5, lBaum6, lBaum7, lBaum8;
lBaum1 = new Baum("H");
lBaum2 = new Baum("V");
lBaum3 = new Baum("S", lBaum1, lBaum2);
lBaum1 = new Baum("F");
lBaum2 = new Baum("Ü");
lBaum4 = new Baum("U", lBaum1, lBaum2);
lBaum5 = new Baum("I", lBaum3, lBaum4);
lBaum1 = new Baum("L");
lBaum2 = new Baum("Ä");
lBaum3 = new Baum("R", lBaum1, lBaum2);
lBaum1 = new Baum("P");
lBaum2 = new Baum("J");
lBaum4 = new Baum("W", lBaum1, lBaum2);
lBaum6 = new Baum("A", lBaum3, lBaum4);
lBaum7 = new Baum("E", lBaum5, lBaum6);
lBaum1 = new Baum("B");
lBaum2 = new Baum("X");
lBaum3 = new Baum("D", lBaum1, lBaum2);
lBaum1 = new Baum("C");
lBaum2 = new Baum("Y");
lBaum4 = new Baum("K", lBaum1, lBaum2);
lBaum5 = new Baum("N", lBaum3, lBaum4);
lBaum1 = new Baum("Z");
lBaum2 = new Baum("Q");
lBaum3 = new Baum("G", lBaum1, lBaum2);
lBaum1 = new Baum("Ö");
lBaum2 = new Baum("CH");
lBaum4 = new Baum("O", lBaum1, lBaum2);
lBaum6 = new Baum("M", lBaum3, lBaum4);
lBaum8 = new Baum("T", lBaum5, lBaum6);
hatMorsebaum = new Baum(null, lBaum7, lBaum8);
}*/
public void erzeugeMorsebaum()
{
Baum lBaum1, lBaum2, lBaum3, lBaum4, lBaum5, lBaum6, lBaum7, lBaum8;
lBaum1 = new Baum("H");
lBaum2 = new Baum("V");
lBaum3 = new Baum("S", lBaum1, lBaum2);
lBaum1 = new Baum("F");
lBaum2 = new Baum("†");
lBaum4 = new Baum("U", lBaum1, lBaum2);
lBaum5 = new Baum("I", lBaum3, lBaum4);
lBaum1 = new Baum("L");
lBaum2 = new Baum("€");
lBaum3 = new Baum("R", lBaum1, lBaum2);
lBaum1 = new Baum("P");
lBaum2 = new Baum("J");
lBaum4 = new Baum("W", lBaum1, lBaum2);
lBaum6 = new Baum("A", lBaum3, lBaum4);
lBaum7 = new Baum("E", lBaum5, lBaum6);
lBaum1 = new Baum("B");
lBaum2 = new Baum("X");
lBaum3 = new Baum("D", lBaum1, lBaum2);
lBaum1 = new Baum("C");
lBaum2 = new Baum("Y");
lBaum4 = new Baum("K", lBaum1, lBaum2);
lBaum5 = new Baum("N", lBaum3, lBaum4);
lBaum1 = new Baum("Q");
lBaum2 = new Baum("Z");
lBaum3 = new Baum("G", lBaum1, lBaum2);
lBaum1 = new Baum("…");
lBaum4 = new Baum("O", lBaum1, null);
lBaum6 = new Baum("M", lBaum3, lBaum4);
lBaum8 = new Baum("T", lBaum5, lBaum6);
hatMorsebaum = new Baum(null, lBaum7, lBaum8);
}
public void verarbeiteMorsezeichen(char pZeichen)
{
String lBuchstabe;
switch (pZeichen)
{
case '.': aktuellerBaum = aktuellerBaum.linkerTeilbaum();
break;
case '-': aktuellerBaum = aktuellerBaum.rechterTeilbaum();
break;
case '/': lBuchstabe = (String)aktuellerBaum.inhalt();
hatZeichenbereich3.haengeAn(lBuchstabe);
aktuellerBaum = hatMorsebaum;
break;
}
}
}
Java:
import sum.werkzeuge.*;
/**
* @author Bernard Schriek
* @version 16.07.2006
*/
public class Baum
{
// Bezugsobjekte
/**
* Der Inhalt des Knotens bzw. der Wurzel
*/
private Object kenntInhalt;
/**
* Der linke Teilbaum
*/
private Baum kenntLinks;
/**
* Der rechte Teilbaum
*/
private Baum kenntRechts;
/**
* Der Vater des Baums
*/
private Baum kenntVater;
/**
* Ein Textwerkzeug f�r den Dienst toString
*/
private Textwerkzeug hatTW;
// Attribute
// Konstruktor
/**
* Ein neuer Baum mit leeren Teilb�umen wird erzeugt
* @param pInhalt das Objekt, das der Inhalt der Wurzel wird
*/
public Baum(Object pInhalt)
{
kenntInhalt = pInhalt;
kenntLinks = null;
kenntRechts = null;
kenntVater = null;
hatTW = new Textwerkzeug();
}
/**
* Ein neuer Baum mit zwei Teilb�umen wird erzeugt
* @param pInhalt das Objekt, das der Inhalt der Wurzel wird
* @param pLinks der linke Teilbaum
* @param pRechts der rechte Teilbaum
*/
public Baum(Object pInhalt, Baum pLinks, Baum pRechts)
{
kenntInhalt = pInhalt;
kenntLinks = pLinks;
if (pLinks != null)
pLinks.setzeVater(this);
kenntRechts = pRechts;
if (pRechts != null)
pRechts.setzeVater(this);
kenntVater = null;
hatTW = new Textwerkzeug();
}
// Dienste
/**
* Der Inhalt der Wurzel wird zur�ckgegeben
* @return den Inhalt der Wurzel
*/
public Object inhalt()
{
return kenntInhalt;
}
/**
* Der Inhalt der Wurzel wird ge�ndert
* @param pInhalt der neue Inhalt der Wurzel
*/
public void setzeInhalt(Object pInhalt)
{
kenntInhalt = pInhalt;
}
/**
* Wenn die Wurzel keinen Inhalt besitzt, wird true zur�ckgegeben
* @return ob der Inhalt der Wurzel leer ist
*/
public boolean istLeer()
{
return kenntInhalt == null;
}
/**
* Der linke Teilbum wird zur�ckgegeben
* @return den linken Teilbaum
*/
public Baum linkerTeilbaum()
{
return kenntLinks;
}
/**
* Der rechte Teilbum wird zur�ckgegeben
* @return den rechten Teilbaum
*/
public Baum rechterTeilbaum()
{
return kenntRechts;
}
/**
* Der rechte Teilbaum wird ver�ndert
* @param pBaum der neue rechte Teilbaum
*/
public void setzeLinkenTeilbaum(Baum pBaum)
{
kenntLinks = pBaum;
if (pBaum != null)
pBaum.setzeVater(this);
}
/**
* Der rechte Teilbaum wird ver�ndert.
* @param pBaum der neue rechte Teilbaum
*/
public void setzeRechtenTeilbaum(Baum pBaum)
{
kenntRechts = pBaum;
if (pBaum != null)
pBaum.setzeVater(this);
}
/**
* Wenn der Baum keine Teilb�ume hat, wird true zur�ckgegeben
* @return ob keine Teilb�ume vorhanden sind
*/
public boolean istBlatt()
{
return kenntLinks == null && kenntRechts == null;
}
/**
* Der Vater des Baums wird zur�ckgegeben
* @return den Vater des Baums
*/
public Baum vater()
{
return kenntVater;
}
/**
* Der Vater des Baums wird ge�ndert
* @param pBaum der neue Vater
*/
public void setzeVater(Baum pBaum)
{
kenntVater = pBaum;
}
/**
* Wenn der Baum keinen Vater hat, wird true zur�ckgegeben
* @return ob kein Vater vorhanden ist
*/
public boolean istWurzel()
{
return kenntVater == null;
}
/**
* Eine Stringrepr�sentation des Baum mit seinen Unterb�umen wird zur�ckgegeben
* @return einen String, der den Baum in mehreren Zeilen darstellt
*/
public String toString()
{
String lString;
lString = this.baumString(0);
if (hatTW.laenge(lString) > 0)
lString = hatTW.textOhne(lString, hatTW.laenge(lString), hatTW.laenge(lString));
return lString;
}
/**
* rekursiver Dienst um die Baumstruktur durch Einr�ckungen darzustellen
* @param pTiefe die aktuelle Tiefe im Baum
*/
private String baumString(int pTiefe)
{
String lString, lPunkte;
lString = "";
lPunkte = "";
for (int i = 1; i <= pTiefe; i++)
lPunkte += ".";
if (kenntLinks != null)
lString += kenntLinks.baumString(pTiefe + 1);
if (kenntInhalt == null)
lString += lPunkte + "leer\n";
else
lString += lPunkte + kenntInhalt.toString() + "\n";
if (kenntRechts != null)
lString += kenntRechts.baumString(pTiefe + 1);
return lString;
}}
Das sind die beiden Klassen. Beim Ausführen gibt es allerdings eine Null Pointer Exception bei diesem Teil:
Java:
this.verarbeiteMorsezeichen(lZeichen);
Bitte um Hilfe oder Ratschläge wie ich dieses Problem lösen kann. Eigentlich müsste ich alle Objekte erstellt haben etc.
MfG