[Java] Fehler in Java Methode

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Targa, 24. Juni 2012 .

Schlagworte:
  1. 24. Juni 2012
    Zuletzt bearbeitet: 24. Juni 2012
    Fehler in Java Methode

    Hoi,
    ja ich weiß bisschen blöder Titel aber mir ist nichts anderes eingefallen

    Folgendes

    Code:
     static void DateiLoeschen() {
    
     boolean loeschen;
     
     String wloeschen = StdInput.readString("\nAlle gespeicherten Daten gehen verloren!\nWirklich löschen? (J/N)").toLowerCase();
     
     System.out.println("Ausgabetest: " + wloeschen);
     
     // Bis hier hin stimmts!!!
     
     if (wloeschen == "j") { //Ab hier nicht mehr
     loeschen = true;
     
     } else {
     loeschen = false;
     }
    
     if (Datei.exists()) { //Exestiert die Datei?
    
     if (loeschen == true) {
    
     try {
     Datei.delete(); // Datei löschen
     } catch (Exception e) {
     System.out.println("Fehler: Die Datei " + Datei.getName()
     + " konnte nicht gelöscht werden! \n");
     }
    
     System.out.println("Datei " + Datei.getName()
     + " wurde gelöscht! \n");
     }
     }
    
     else {
     System.out.println("Datei nicht gefunden! \n");
     }
     } // Ende DateiLöschen
    
    In einer anderen Methode wird eine Datei angelegt, das funktioniert auch soweit, die Datei ist definitiv vorhanden. Und ohne die Abfrage ob man die Datei auch wirklich löschen will hat es auch funktioniert nur hier verzweifle ich nun.

    Es kommt immer "Exception in thread "main" java.lang.NullPointerException" und ich weiß einfach nicht warum, hab schon so viel rumm probiert aber als Anfänger ist das eben so ne Sache wa

    Genauerer Fehler:
    Exception in thread "main" java.lang.NullPointerException
    at Projekt.DateiLoeschen(Projekt.java:166) ---> if (Datei.exists()) { //Exestiert die Datei?
    at Projekt.menue_an(Projekt.java:57) ---> Wird die Methode DateiLoeschen aufgerufen
    at Projekt.main(Projekt.java:22) ---> MethodeMenue wird aufgerufen


    Also bis zur Abfrage ob man die Datei löschen will klappts auch die TestAusgabe funktioniert noch daher denk ich das irgendwas mit den If Abfragen nicht ganz so hinhaut wie es sollte, aber keine Ahnung warum.

    Vielleicht kann ja mal jemand drüber schauen und falls man noch weiteren Code braucht einfach kurz bescheid geben




    Einfacher, ganzer Quellcode auf pastebin -> http://pastebin.com/Azbt3cjv
     
  2. 24. Juni 2012
    AW: Fehler in Java Methode

    Versuch mal den String mit "equals" oder "compareTo" zu vergleichen. Den Fehler habe ich so oft gemacht (weil ich das aus anderen Sprachen gewohnt bin), irgendwann brennt sich das ins Gehirn ein.
     
    1 Person gefällt das.
  3. 24. Juni 2012
    Zuletzt bearbeitet: 24. Juni 2012
    AW: Fehler in Java Methode

    Code:
    Exception in thread "main" java.lang.NullPointerException
    
    Bedeutet in deinem Falle, dass das File-Objekt nicht existiert. (Das Objekt, ich rede nicht von der Datei).

    Also müsste vor die Abfrage noch das File-Objekt initialisiert werden, bevor du es benutzt.
    Code:
    Datei = new File("/ProjektProMod/Datensaetze.txt");
    
    @MasterJulian
    Einzelne chars sind primitive Datentypen, und können daher per "==" verglichen werden.
    Genauso wie man sie auch switchen kann . Aber das Ganze hängt nicht mit dem Null-Pointer zusammen.

    Edit: Aber natürlich ist das dort kein char, sondern ein String ^^
     
    1 Person gefällt das.
  4. 24. Juni 2012
    AW: Fehler in Java Methode

    Ah ok.
    D.h ich muss das Objekt in der Methode DateiLoeschen initialisieren da ich das Objekt zuvor nur in einer anderen Methode initialisiert habe aber nicht für die ganze klasse?! So in etwa zumindest

    Falls das so stimmt, kommt nun zwar kein Fehler mehr es scheint aber so als würde es gar nicht in die erste If-Abfrage reingehen sondern springt dann gleich nach dem ich die Abfrage beantwortet hab ob ich die Datei wirklich löschen will ins Menü zurück.
     
  5. 24. Juni 2012
    AW: Fehler in Java Methode

    Genau. Es würde auch reichen, wenn du das File-Objekt einmal in der main() initialisierst.

    Jetzt musst du noch MasterJulians Tipp annehmen, und per .equals überprüfen. Alternative auch mit EqualsIgnoreCase

    @MasterJulian: Ich habe oben editiert ;P
     
  6. 24. Juni 2012
    AW: Fehler in Java Methode

    Hell ya, es geeeht. Endlich hätte ich auch früher draufkommen können hier mal nachzufragen anstatt mich dumm und dämlich zu suchen

    Vielen Dank an euch 2!!
     
  7. 24. Juni 2012
    AW: Fehler in Java Methode

    Ich denke, dass du mit "dumm und dämlich"-suchen mehr erreichst. Das fördert den Lernprozess enorm.
     
  8. 24. Juni 2012
    AW: Fehler in Java Methode

    Ja klar, aber wenn man net weiß nach was man suchen muss ist das eher nicht so produktiv, wie man an meinem Beispiel nun sehen konnte. War bestimmt 3-4h an dem Spaß dran

    Woher wusstest du denn das dies der Fehler war? Kann man das irgendwie am Fehlercode erkennen oder so?
     
  9. 24. Juni 2012
    AW: Fehler in Java Methode

    Eine NullPointerException wird immer geworfen, wenn man auf etwas zugreifen will, was etwas nicht existent ist.
    Code:
    http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/NullPointerException.html
    
    Wegen .equals():
    Der "=="-Operator vergleicht nicht den Inhalt von Objekten, sondern die Objekte selbst.
    Objekt1 ist nicht gleich Objekt2, auch wenn der Inhalt gleich ist. Objekt1 is aber gleich Objekt1, da es (im Speicher) wirklich das gleiche Objekt ist.

    Bei primitiven Datentypen (integer, char, boolean, ...) funktioniert "==" jedoch trotzdem. Bei dir oben hat das nicht funktioniert, da String kein primitiver Datentyp ist, sondern ein Objekt.

    Um den Inhalt von Objekten zu vergleichen, musst du .equals nutzen.
     
  10. 25. Juni 2012
    Zuletzt bearbeitet: 25. Juni 2012
    AW: Fehler in Java Methode

    Keine Ahnung ob es gewollt ist aber du solltest dir mal Übergabeparameter im Zusammenhang mit Methoden anschauen. Die Struktur von der Methode an sich ist ziemlich ungünstig. Du sonst schneller wo die Fehler liegen.

    So was erkennt man relativ schnell wenn man sich wirklich mal mit den Sprachgrundlagen auseinandersetzt bevor man irgendwie rumproggt. Kommt allerdings auch mit der Zeit...

    Ansonsten:
    Primitive Datentypen und Referenzen vergleicht man mit ==
    Objekte vergleicht man inhaltlich mit equals oder compareTo, welche teilweise selbst implementiert werden müssen, damit sie zufriedenstellend arbeiten. Die Standardimplementierung von "equals" in "Object" vergleicht z.B. auch nur mit "==" die Referenz (bzw. abstrakte Speicheradresse).

    == vergleicht bei Objekten also den Ort wo das Objekt gespeichert ist und nicht den Inhalt.

    "equals" kann alles mögliche machen, ist jedoch dafür angedacht Objekte auf inhaltliche Gleichheit zu überprüfen. "Equals" wird oft auch anders verwendet (siehe [G]Hibernate[/G] -> Equals and HashCode | Community), daher sollte man bevor man anfängt da etwas zu überschreiben vorher die Abhängigkeiten überprüfen.

    Das Interface Comparable kann auch dafür genutzt werden, allerdings geht dieses in dahin weiter, dass Objekten eine Wertigkeit zugewiesen werden kann. Sprich ein anderes Objekt kann größer/kleiner/gleich sein.
     
  11. 26. Juni 2012
    Zuletzt bearbeitet: 26. Juni 2012
    AW: Fehler in Java Methode

    das lustige ist ja, dass java sehr wohl strings miteinander vergleichen kann, wenn es sich um zwei string-literale handelt. diese teilen sich nämlich die selbe adresse im speicher - oder eben nicht

    Code:
    String hallo = "hallo";
    
    assert hallo == "hallo"; // okay
    assert "hallo" == "hallo"; // okay
    assert "guten tag" == "hallo"; // fail
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.