Hashmap will nicht anzeigen

klanawagna

Erfahrenes Mitglied
Hallo!
Ich sitze hier schon seit geraumer Zeit vor einem Problem, das mich frustriert. Ich vermute die Lösung ist extrem offensichtlich, aber ich hab mich hier schon rein verbissen! Es geht darum, dass eine "Bestellung" Klasse eine Hashmap enthält. Diese hat allerdings Probleme mit der Speicherung und Anzeige. Jedes mal beim Aufruf der zeigeAn()-Funktion wirft er mir eine Null-Pointer-Exception. Ich hoffe es kann mir wer helfen, bitte!!

Java:
package Bestellvorgang;

import java.io.*;
import java.util.*;
import personen.Kunde;
import personen.Lieferant;

public class Bestellung implements java.io.Serializable {
	private Kunde kunde;
	private HashMap<Integer, Bestellposition> positionen;
        private Integer count;


        public Bestellung(Kunde kund)
	{
		positionen = new HashMap<Integer, Bestellposition>();
		kunde = kund;
                count = 0;

	}
	public void nimmAuf(Bestellposition pos)
	{
                
                positionen.put(count, pos);
                count++;
	}
	public String zeigeAn()
	{
		Ware ware;
		Kundenrabatt rabatt = new Kundenrabatt();
		Bestellposition pos = new Bestellposition();
		String output = new String();
               
		for(int i=0;i<=count;i++)
		{
			//System.out.println(positionen.length);
			pos = positionen.get(i);
                        System.out.println("i:" + i);
			ware = pos.gibWare();
                         System.out.println("Count:" + count);

			//System.out.println(rabatt.berechneRabattpreis(ware.gibPreis()));

                        output += "<html> Nr. " + ware.gibNummer() + ": " + ware.gibBezeichnung() + " zu " + pos.gibMenge() + " Stk.";
			output += "<br>Listenpreis: " + ware.gibPreis()+" - Kundepreis: "+ rabatt.berechneRabattpreis(ware.gibPreis());
			output += "<br>fuer: " + kunde.gibName() + "</html>";

                        //Lieferant lief = ware.getLieferant();

                       // output += "\nvon: " + lief.toString();
			
		}
		
                return output;
	}
	
	
}

Vielen lieben dank!

lg
klanawagna
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

da du die Exception nicht mit gepostet hast, kann ich nur raten. Du musst mal schauen, in welcher Zeile die Exception geworfen wird. In dieser Zeile ist ein Object null.

pos, ware, rabatt oder kunde könnten null sein. Ich weiß beispielsweise nicht wo rabatt her kommt.

Kontrolliere einfach mal diese Objecte.

Gruß

Sascha
 
typischer tippfehler

da meineswissens eine HashMap genau wie ArrayList oder dieser ganze iterator-kram nur bis
Java:
for(int i=0; i<map.size(); i++)
und nicht bis
Java:
for(int i=0; i<=map.size(); i++)
ausgelesen werden können würde ich dir empfehlen einfach mal dieses "=" - zeichen weg zu nehmen ...
es kann gut möglich sein das du auf grund dieser tatsache einfach über das ende deiner map hinaus rennst wo die werte logischweise NULL sind ...
andern falls kann es eigentlich nur sein das eine der getter-methoden NULL zurückgibt ...
wie aber bereits gesagt : ohne StackTrace können wir hier nur raten ... also einfach ein
Java:
try
{
   //CODE
}
catch(Exception e) //wichtig das du Exception nimmst um auch wirklich JEDEN von Exception abgeleiteten fehler bekommst ... ob Error sinnvoll wäre wage ich zu bezweifeln
{
   e.printStackTrace();
}
drumbauen ... das ganze über console starten und den Stack hier posten
 
Danke erstmal, die Nullpointerexception wurde wegen des Rabattes geworfen, aber jetzt habe ich ihn überprüft und wirklich hineingeschrieben ;)

neues Problem; die auflistung! Er listet mir immer nur den ersten auf, wenn ich bei der forschleife das = weggebe, wirft er auch eine Nullpointer-Exception ^^

Ich danke euch bis jetzt schon mal!

Java:
public String zeigeAn()
	{
		Ware ware;
                Kundenrabatt rabatt = null;
                
                if(kunde.bekommtRabatt()) {
                    rabatt = new Kundenrabatt();
                }
                
		Bestellposition pos = new Bestellposition();
		String output = new String();
               
		for(int i=0;i<count;i++)
		{
			//System.out.println(positionen.length);
			pos = positionen.get(i);
                        System.out.println("i:" + i);
			ware = pos.gibWare();
                        
                         System.out.println("Count:" + count);

			//System.out.println(rabatt.berechneRabattpreis(ware.gibPreis()));

                        output += "<html> Nr. " + ware.gibNummer() + ": " + ware.gibBezeichnung() + " zu " + pos.gibMenge() + " Stk.";
			output += "<br>Listenpreis: " + ware.gibPreis();

                        if(kunde.bekommtRabatt()) {
                            output +=" - Kundepreis: "+ rabatt.berechneRabattpreis(ware.gibPreis());
                        }
			output += "<br>fuer: " + kunde.gibName() + "</html>";

                        //Lieferant lief = ware.getLieferant();

                       // output += "\nvon: " + lief.toString();
			
		}
		
                return output;
	}
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

du hast wieder keine Exception gepostet. Aber mal ein Tipp dazu. Wenn eine Nullpointer-Exception geworfen wird, musst du dir anschauen in welcher Zeile diese geworfen wird (steht ja dabei). Dann ist das Object, das du in dieser Zeile benutzt null. Sind in dieser Zeile mehrere Objecte musst du halt schauen welches davon null ist.

Gruß

Sascha
 
mhm, tschuldigung, muss meine Aussage zurückziehen: keine Exception, sondern es wird einfach nur das erste Element angezeigt, sonst nix! Woran liegt das?
 
DOPPEL-POST FTW ^^ ... als tipp : nächste mal EINMAL auf ANTWORTEN und dann WARTEN ... die server von tutorials sind zur zeit gut belastet .. ich hatte vorhin schon das problem

*warum gibt es immer wieder leute die einfach nicht abwarten können ?*

zum problem :

warum die NullPointer geworfen wird nur weil du aus <= ein < ist so nicht offensichtlich ... ich kann dennoch eine erklärung abgeben
da COUNT = 0 ist *siehe intialiesirung* und nicht wie du gedacht hast COUNT = positionen.size() *oder sowas* und deine bedingung dann 0<=0 / 0<0 ist wir das ganze nur EINMAL ausgeführt weil beim zweiten durchlauf dann 1<=0 / 1<0 ist und nunmal FALSE liefert was zum sofortigen abbruch des for-loops führt ...
du solltest vllt erstmal COUNT richtig initialisieren ...
 
DOPPEL-POST FTW ... als tipp : nächste mal EINMAL auf ANTWORTEN und dann WARTEN ... die server von tutorials sind zur zeit gut belastet .. ich hatte vorhin schon das problem

*warum gibt es immer wieder leute die einfach nicht abwarten können ?*

Der Haken ist, ich hab nur einmal geklickt. ;-)
Dass die Server belastet sind, bekomme ich momentan nicht mit, da ich nur per Edge ins Internet gehe.

Gruß

Sascha
 
AAAAAAAHHHHHH! Zum verzweifeln. Ich habe das Problem jetzt gelöst in dem ich... moment, kurz festhalten: Statt eines Labels eine JTextArea verwende. Lösung des Problems: Das JLabel zeigt nichts mehr nach dem schließen des </html> Tags an, mit der Schleife und co hat alles gepasst xD.

na dann, danke für eure Mithilfe!

lg
klanawagna
 
Zurück