# HashMap richtig zurückgeben



## shiRiaRu (26. Feb 2004)

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.


```
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;
}
```


----------



## Illuvatar (26. Feb 2004)

shiRiaRu hat gesagt.:
			
		

> ```
> public static Object readNodeList()
> ```



Kannst du nicht schreiben:


```
public static HashMap readNodeList()
```

???

PfM


----------



## Guest (26. Feb 2004)

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.


----------



## shiRiaRu (26. Feb 2004)

oops war nicht eingeloggt 

... naja ich hatte noch nie mit HashMaps  zu tun deshalb verwirrt mich das sehr


----------



## bygones (26. Feb 2004)

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)


----------



## shiRiaRu (26. Feb 2004)

Die Klasse sieht so aus:
---------------------------


```
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;
	}
}
```


----------



## shiRiaRu (26. Feb 2004)

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.


----------



## Beni (26. Feb 2004)

Noch eine Bemerkung:

Schon mal das ausprobiert?
	
	
	
	





```
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)


----------



## bygones (26. Feb 2004)

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...


----------



## bygones (26. Feb 2004)

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:
	
	
	
	





```
HashMap entries = new HashMap();
```
einfach
	
	
	
	





```
entries = new HashMap();
```
dadurch wird die statische genommen !!


----------



## shiRiaRu (26. Feb 2004)

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)


```
static  HashMap testentries;
```

In der Main Methode steht: 


```
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)


----------



## bygones (26. Feb 2004)

:roll:    hihi war sekunden schneller mit der Lösung (siehe oben)


----------



## shiRiaRu (26. Feb 2004)

aaaaalllles Klar    vielen dank deathbyaclown 

ich muss mehr definitiv mehr  :###


----------



## bygones (26. Feb 2004)

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:


----------



## Beni (26. Feb 2004)

Das war ja ein ganz fieser!

 *Applaus für deathbyaclown*


----------

