#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 + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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!! + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren