HashMap richtig zurückgeben

Status
Nicht offen für weitere Antworten.

shiRiaRu

Mitglied
Hi all,

Ich bin etwas verwirrt was dieses Problem angeht.
Ich versuche die wiedergegebe HashMap aus einer meiner Methoden
einer HashMap in meiner main Methode zuzuweisen.

wenn ich nicht caste kommt:

found : java.lang.Object
required: java.util.HashMap

Wenn ich es wie unten gezeigt mache bekomme ich "null" zurück.

Code:
In der MainMethode:
------------------------

HashMap testentries = new HashMap();
testentries = (HashMap)NodeListReader.readNodeList();

In einer anderen Klasse "NodeListReader" die Methode readNodeList() :
----------------------------------------------------------------------------------

public static Object readNodeList()
{
   HashMap entries = new HashMap();
   blubb blubb HashMap füllen usw
   return entries;
}
 
Komischerweise nicht bzw es geht schon: ich kann es so ändern
wie du schon gesagt hast und das auch ohne Compilerfehler.
Ich lasse mir ja kurz bevor ich die HashMap returnen lasse eine
zeile davor ein value testweise ausgeben d.h die HashMap ist != null

Wenn ich das aber bei der HashMap in der Main (der ja der
returnwert zugeweisen wird) versuche. bekomme ich eine nullpointer
exeption.
 
ich kann in dem kurzen Abschnitt keinen Fehler entdecken.
Allgemein würde ich auch als Rückgabe HashMap nehmen - da dies ja auch so (scheinbar) gewollt ist.

Poste mal mehr Code (von der blubb blubb sache / main method)
 
Die Klasse sieht so aus:
---------------------------

Code:
import java.io.*;
import java.util.*;
import javax.swing.tree.*;
	
public class NodeListReader
{	
	static String[] result;
	static String[] subresults;
	static HashMap entries;
	
	public static HashMap readNodeList()
	{	
		String fullstring = "";
		try
		{
			File sourcefile = DocLoadMethods.loadChooser();
			int filelenght = (int)sourcefile.length();
			
			if(sourcefile != null)
			{
				FileInputStream streamin = new FileInputStream(sourcefile);
				byte[] byte_array = new byte[filelenght];
				char[] char_array = new char[filelenght];
				
				streamin.read(byte_array);
				
				for(int i=0;i<byte_array.length;i++)
				{	
					char_array[i] = (char)byte_array[i];
					fullstring = fullstring + char_array[i] ;
				}
				streamin.close();

				result = fullstring.split("\n");
				TextIO.putln("Fullstring Länge"+result.length);
				
				HashMap entries = new HashMap();

				for(int x=0;x<result.length;x++)
				{
					subresults = result[x].split("\t");
					TextIO.putln("Object="+subresults[0]+"  &  Value="+subresults[1]);
					entries.put(subresults[0],subresults[1]);
				}
				if(entries != null)
      			{
      				TextIO.putln("-> NodeListReader -> HashMap -> Voll -> OK");      					
      			}
				Object muu = entries.get("aligator-02");
      			TextIO.putln("aligator-02: value="+muu.toString());
			}
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
		return entries;
	}
}
 
Eigentlich ist der Quelltext in der Methode egal da die HashMap Einträge besitzt.
Ich bekomme ja vor dem return noch folgenden output:

aligator-02: value=Böser Aligator


Sprich das stand auch in meiner text datei die ich da byteweise einlese.
 
Noch eine Bemerkung:

Schon mal das ausprobiert?
Code:
byte[] array = ...
String string = new String( array );
:wink:


Ich sehe in dieser Methode auch keinen Fehler, aber poste doch mal die Ausgabe der NullPointerException. (Und die Methode, in der sie ausgelöst wird gleich mit, sofern es nicht readNodeList ist)
 
Beni hat gesagt.:
Ich sehe in dieser Methode auch keinen Fehler, aber poste doch mal die Ausgabe der NullPointerException. (Und die Methode, in der sie ausgelöst wird gleich mit, sofern es nicht readNodeList ist)
Mach mal um deinen Code in der main Methode ein try & catch. Fange dort den NullPointer ab und gib dir über e.printStackTrace() den Fehler aus.

Falls du mit irgendeiner IDE arbeitest kannst du ja notfalls auch mal den Debug Modus laufen lassen...
 
HAB ES !!!

Du hast eine statische HashMap entries, die wird aber nie intialisiert. was du füllst ist eine lokale Variable entries !!! Daher klappt das füllen und deine Debug ausgabe ohne Probleme, zurückgegeben wird aber die statische Variable entries.

also statt:
Code:
HashMap entries = new HashMap();
einfach
Code:
entries = new HashMap();
dadurch wird die statische genommen !!
 
Danke für den string tip :roll:

Die Main Methode ist mit 377 zeilen etwas zu gross zum posten drum hier auszugsweise:
Als KlassenVariable habe ich das stehen: (weil ich die HashMap noch verwenden möchte)

Code:
      static  HashMap testentries;

In der Main Methode steht:

Code:
     testentries = NodeListReader.readNodeList();
     Object muu = testentries.get("aligator-02");               
     TextIO.putln("aligator-02: value="+muu.toString());

Object muu = testentries.get("aligator-02"); //zeile 290


java.lang.NullPointerException
at JTreeOutput.actionPerformed(JTreeOutput.java:290)
 
:roll: 😀 hihi war sekunden schneller mit der Lösung (siehe oben)
 
kein Problem - habe gerne geholfen :lol:
Geltungsbereiche von Variablen sind das eine, überschreiben von statischen / Instanz Variablen das andere....

Da lob ich mir dann mal wieder ne IDE, die mich vor so etwas warnt :roll: :wink:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben