Exception in thread "main" java.lang.OutOfMemoryEr

  • Themenstarter Themenstarter JonnyB
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

JonnyB

Gast
Hallo,

ich habe 2 Klassen:


Klasse 1: MainBig.java


Code:
public String getGroupName(int zeile)
{
int i = zeile;		
			
if(dimension.getValueAt(i,4).toString().equals("abgelaufen"))
{
userDN = "CN=" + dm.getValueAt(i,6) + ",OU=" + groupC + ",OU=" + organizationTF.getText() + baseDN;		
}
			
return userDN;
			
}




Klasse 2: DAP.java


Code:
MainBig mainx = new MainBig();

for (int i = 0 ; i < mainx.dimension.getRowCount(); i++)
{
	 String userDN = mainx.getGroupName(i);
			 
}


Nach programm start:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at MainBig.getGroupName(MainWindow.java:212)
at DAP.createUserAccount(LDAP.java:83)
at Mainbig.actionPerformed(MainWindow.java:625)

die Zeile 212 ist dieser Code:
Code:
 if(dm.getValueAt(i,4).toString().equals("abgelaufen"))
und ich weiß ums verrecken nicht warum ein null pointer? Seht Ihr mehrß
 
du hast eine NullPointerException, keinen OutOfMemoryEr (ror?)

NullPointerException != OutOfMemoryEr (ror?)

erkennbar schon am ersten Buchstaben, N != O 😉
 
nur ein kleiner tipp am rande, wenn du strings miteinander vergleichst, wobei ein string ein literal ist, solltest du so abfragen:

String a = "irgendwas";
"irgendwas".equals(a)

wenn a z.B. null wäre würdest du an dieser stelle keine nullpointerexception bekommen

das trägt zwar nicht zur lösung bei, ist jedoch sauberer programmierstil
 
es ist inhaltlich was anderes, da kann man nicht wirklich von sauber und nicht sauber sprechen,

manchmal dürfte man froh sein, auf die fehlenden null-Objekte per Exception hingewiesen zu werden, bevor die später viel mehr Unheil anrichten,

ein expliziter null-Test wäre natürlich besser,
dann oder auch im anderen Extrem (null kann nicht vorkommen) wäre also die Reihenfolge des Vergleichs egal,

"irgendwas".equals(a) hilft also nur, wenn man weiß, dass null vorkommt oder null in jedem Fall als nicht-gleich zählt,
und man das kurz und schnell, geradezu unsichtbar mit behandeln will,
schicker Code, aber ob das sauber ist?..
 
ich gebe dir absolut recht, es macht nur dann sinn wenn man auch null-werte erwartet, ansonsten muss man vorher auf null abfragen
 
So ich werde aus der Fehlermeldung nicht schlau und ich denke laut eclipse liegt es an der instanz der
Hauptklasse MainBig.class:

Code:
public class MainBig extends JFrame implements ActionListener
{

    public MainBig()
    {  


     }
    public static void main(String args[])
    {          
        try				
        {    	        
         Color  defForeground = new Color(0,140,222);             
         UIManager.put("Label.foreground",defForeground);         
           
         JFrame.setDefaultLookAndFeelDecorated(true);
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }

        MainBig Fenster = new MainBig();      
        Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         
        Fenster.setSize(1000,740);
        Fenster.setLocationRelativeTo(null);
        Fenster.setResizable(false);       
        Fenster.setVisible(true);   
    }
}



Code:
public class Test
{
	
	
    MainBig mainx = new MainBig();


    public Test()
    {			
	 
		 
    }



   public void doIt()
   {


        for (int i = 0 ; i < mainx.dm.getRowCount(); i++)
       {
		 //System.out.println(getGroupName(i));
		 System.out.println(mainx.dm.getValueAt(0, i));
			 
       }	

   }


}

Das beste ist ja, dass die methode doIt noch ncihtmal aufgerufen wird sondern gleich beim Programmstart bekomme ich obige Fehlermeldung ??? Wie gesagt mit dem object mainx stimmt was nicht nur was?
 
Nun habe ich das in der class Test geändert:
Code:
MainWindow mainx;

dann kompiliert eclipse doch es meckert immer an meiner for-schleife rum und jetzt kommt die meldung:

Code:
java.lang.NullPointerException

Das kann aber ums verrecken nicht sein!!! Die Tabelle ist randvoll am überlaufen mit Daten, wie kann da ein Nullpointer auftreten???
 
Wo bitteschön ist denn in deiner Hauptklasse dm deklariert?! Ich sehe da nichts

sorry hab ich vergessen mit anzugeben:


Die Variablen befinden sich in der Klasse MainBig.class


Code:
 DefaultTableModel dm;
        JTable tabelle
;

dies steht im Konstruktor:
Code:
dm = new DefaultTableModel (rowData,colName);         
tabelleT = new JTable( dm )

Kannst du mir helfen,bitte ?
 
Dann prüf doch mal alle Objekte durch ob sie null sind.
Solange du hier nur unvollständige Klassen postest können eh alle Beteiligten nur raten.

Code:
public class Test 
{ 
    
    
    MainBig mainx = new MainBig(); 


    public Test() 
    {          
    
       
    } 



   public void doIt() 
   { 

   if (mainx == null) { 
      System.out.println("mainx ist null!");
   }
   if (mainx.dm == null) {
      System.out.println("mainx.dm ist null!");
   }


        for (int i = 0 ; i < mainx.dm.getRowCount(); i++) 
       { 
       //System.out.println(getGroupName(i)); 
       if (mainx.dm.getValueAt(0, i) == null) {
           System.out.println("mainx.dm.getValue ist null bei :" + i);
        }
       System.out.println(mainx.dm.getValueAt(0, i)); 
          
       }    

   }
 
sparrow hat gesagt.:
Dann prüf doch mal alle Objekte durch ob sie null sind.
Solange du hier nur unvollständige Klassen postest können eh alle Beteiligten nur raten.
ote]

Das Probem ist ja , dass die for schleife mit der mainx instanz erst aufgerufen wird bzw. werden kann per jbutton click, nachdem die tabelle voll geladen ist mit daten von spalte 0 bis x, also kann da nicht null sein


Jetzt frage ich mich allerdings, bevor die anwendung startet und die tabelle mit datengefüllt wird und bevor ich den jbutton drücke mit der forschleife etc... nimmt da java schon eine prüfung durch ob etwas null ist das kann ich net glauben...

wie auch immer ich probiere es sofort aus mit deinem hinweis!
 
JonnyB hat gesagt.:
Das Probem ist ja , dass die for schleife mit der mainx instanz erst aufgerufen wird bzw. werden kann per jbutton click, nachdem die tabelle voll geladen ist mit daten von spalte 0 bis x, also kann da nicht null sein

Es geht ja auch nicht darum, dass der Inhalt null ist, sondern ein Objekt nicht richtig initialisiert wurde.
Eine Initialisierung erfolgt mit Objekt o = new Objekt(), das würde bedeuten, dass das Objekt mit dem Namen o als eine Instanz von Objekt initialisiert wurde.
Wurde ein Objekt nicht initialisiert wird eine NullPointerException geworfen.

Der Fehler befindet sich also nicht in den Daten der Tabelle sondern ein nicht korrekt initialisiertes Objekt.
Genau aus dem Grund sollst du ja mal schauen welches der Objekte eigentlich null ist.


Gruß
Sparrow
 
ne hat sich nichts geändert. Ich habe die null prüfungen gemacht und erhalte nicht mal eine Ausgabe...
 
Wie genau lautet denn die Fehlermeldung?
Bitte wortwörtlich bzw. hier hinein koprieren inkl. allem drum und dran.
 
Einen Outofmemory kannst du bei einer unendlich Schleife schnell schaffen oder einer rekusriven Methode die sich selbst aufruft!

Ansonsten bräuchte man den genauen Fehler!
 
thE_29 hat gesagt.:
oder einer rekusriven Methode die sich selbst aufruft!
Da wirst du in fast allen Fällen eher einen StackOverflowError bekommen.
Auch die Endlosschleife muss nicht zu einem OutOfMemory führen.
Die häufigste Ursache sind nach meiner Erfahrung Array und String Operationen.
 
wenn ich die klasse Test auflöse und den code mit der for schleife ohne die Instanz mainx benutze klappt alles ???
 
Wildcard hat gesagt.:
Die häufigste Ursache sind nach meiner Erfahrung Array und String Operationen.

private String[][] rowData = new String [800][9];

der witz ist an dieser zeile code gabs es nie was zu mäckeln die ist so alt wie das programm selber. Nur wenn ich die sache mit der mainx instanz mache mäkelt er... warum ist mir schleiferhaft denn 800 x 9 = 5600 strings dürfte ja kein 1 GB ram pc aus den latschen hauen ^^
 
1. Ein String kann auch viele viele MBs lang sein
2. Java verwendet nicht den ganzen RAM, sondern per Default maximal 64MB.
Wenn du mehr willst musst du ihn mit zB -Xmx512M zuweisen.
 
Zeig mal bißchen mehr Code her.. Maybe hast du wirklich wo nen rekursvions/endlos loop!

@Wildcard: nö, ich kriege meistens einen java.lang.OutofMemory.. Weil ich in der Schleife ja brav was allokiere 😉
 
sorry leute bin unter zeitdruck etc... bzw. kann paar tausend zeilen hier net posten ich werd den code einfach in die main klatschen da gehts ohne probleme ;-)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben