wie behandelt man leere textfelder

Status
Nicht offen für weitere Antworten.

biker126

Bekanntes Mitglied
hallöchen

wenn ich sowas hab:
Code:
String text = textfeld.getText();

und der benutzer in das textfeld nix eingebeben hat, dann gibts mir immer irgendwelche exceptions (nullpointer oder meist array-fehler wenn ich mit dem string was anstell).

ich hab versucht mit if abfragen zu prüfen ob der string "leer" ist oder nicht. aber if (text == null) und if(text == "") gehen beide irgendwie nicht...

allerdings kommt bei System.out.println(text) "null" raus wenn man nix eingeben hat...

gibts da ne möglichkeit das abzufangen? also das mein code nur ausgeführt wird wenn was im textfeld steht und sonst halt ne meldung man soll gefälligst was reinschreiben... *g*

gruss biker
 

schalentier

Gesperrter Benutzer
string.equals(null)? hab ich noch nie gesehen.
ist bei einem leeren textfeld
Code:
String text = textfeld.getText();
nicht text.equals("")?

Also ich mach einen stringtest immer so:
Code:
if( text!=null && text.length()>0 )
{  
   //arbeit mit text 
}
 

Grizzly

Top Contributor
biker126 hat gesagt.:
hmm .equals() !!!
hätt ich eigentlich wissen müssen... string.equals(null) funzt prima... :)

Aber eigentlich müsste es ja heissen :### :
Code:
JTextField textfield;

...

String text = textfeld.getText();

if (text.equals("")) {
   ...
}

denn textfield.getText() gibt immer einen String zurück. Nur wenn natürlich der Benutzer nichts in das Feld eingetragen hat, ist der String leer, aber nicht null. :wink:
 

biker126

Bekanntes Mitglied
wie das intern in java mit den pointers umgesetzt wird weiss ich nich genau, aber ich glaub es ist so:

wenn du einfach mal ne String-var einführst:

String text;

dann zeigt dieser String auf den null-pointer bzw. auf "null" sozusagen. und wenn du diesem string erst mit .getText() n wert zuweisst, und getText gibt dir gar nix zurück, dann zeigt text halt immer noch auf null. so würd ichs mir erklären. weil immerhin funzt ja die abfrage .equals(null) ;)
in der API steht leider nichmal drinn was .getText() zurückgibt, wenn da nix drinn steht. aber wahrscheinlich "". und das is wohl mehr oder weniger das gleiche wie null. zumindest gibt .setText(null) ein "" zurück ^^
 

Grizzly

Top Contributor
Wenn ich die Java API Dokumentation richtig interpretiere, ist es so:

Wenn Du bei einem JTextField (Swing) der Methode setText null übergibst, wird der Text, der bisher enthalten war, intern gelöscht (also auf "" gesetzt, nicht auf null). Und getText verhält sich folgendermaßen:
Code:
Returns the text contained in this TextComponent. If the underlying document is null, will give a NullPointerException.
Und da das darunterliegende Dokument im Normalfall nie null wird, kommt zumindest immer ein leerer String (nicht null) zurück.

Wie es bei TextField (AWT) oder dem Pendant in der SWT aussieht, weiss ich so aus dem Stand nicht ???:L . Die API Dokumentation sagt hier nichts genaueres :###. Müsste man vielleicht mal ausprobieren.
Aber ich vermute, dass es sich hier ähnlich verhält.
 
B

bygones

Gast
biker126 hat gesagt.:
in der API steht leider nichmal drinn was .getText() zurückgibt, wenn da nix drinn steht. aber wahrscheinlich "". und das is wohl mehr oder weniger das gleiche wie null. zumindest gibt .setText(null) ein "" zurück ^^
Das ist NICHT das selbe ob "" oder null drin steht, das eine ist ein String Objekt ohne Inhalt, das andere ist das null Objekte (Unterschied !).

Aber warum sollte ein leeres Textfeld null zurückliefern ??? Java holt sich den Text in einem Feld und speichert es in einen String, wenn das Feld leer ist ist es auch der String.....
 

biker126

Bekanntes Mitglied
und warum geht dann .equals(null) ? naja, ist wohl so, dass ein null-objekt, welches ja auch ein string-objekt sein kann logischerweise auch n leeren string "" besitzt...

aber ich stimm euch zu, dass .equals("") rein für den programmierer wohl logischer ist, da du ja 2 strings vergleichen willst. aber rein von der funktion lautet sie ja (string-)objekt1.equals( (string-)objekt2). also vergleicht man halt einfach mit dem "null-string-objekt" ^^
 
B

bygones

Gast
biker126 hat gesagt.:
und warum geht dann .equals(null)
Weil equals an sich zwei Objekte vergleicht !!!
Code:
 boolean equals(Object anObject)
          Compares this string to the specified object.
 

Grizzly

Top Contributor
biker126 hat gesagt.:
und warum geht dann .equals(null) ? [...]

equals prüft zwei Objekte auf Gleichheit, nicht ob sie dasselbe Objekt sind. Das macht man ==.

Man könnte auch sagen: equals überprüft, ob beide Objekte den gleichen Inhalt haben. == prüft ob sie im Speicher an der selben Stelle stehen (bzw. ob die Referenz auf die selbe Stelle im Speicher zeigt, da es ja in Wirklichkeit ein Pointer ist).

Hier ein kleines Beispiel um den Unterschied zu verdeutlichen:
Code:
public class Person {
	
	/** Speichert den Nachname der Person */
	private String nachname = null;
	/** Speichert den Vorname der Person */
	private String vorname = null;
	
	/**
	 * Dies ist der Standard Konstruktor.
	 * @param nachname Der Nachname der Person.
	 * @param vorname Der Vorname der Person.
	 */
	public Person(String nachname, String vorname) {
		this.nachname = nachname;
		this.vorname = vorname;
	}
	
	/**
	 * Vergleicht dieses Objekt mit dem angegebenen Objekt.
	 * @see java.lang.object#equals(Object)
	 */
	public boolean equals(Object obj) {
		if (obj instanceof Person) {
			Person person = (Person)obj;
			if (this.nachname.equals(person.nachname) && this.vorname.equals(person.vorname)) {
				return true;
			}
		}
		return false;
	}
	
	public static void main(String[] args) {
		Person michaelMustermannStuttgart, michaelMustermannBerlin, michaelMustermannFrankfurt;
		
		michaelMustermannStuttgart = new Person("Mustermann", "Michael");
		michaelMustermannBerlin = michaelMustermannStuttgart;
		michaelMustermannFrankfurt = new Person("Mustermann", "Michael");
		
		if (michaelMustermannStuttgart == michaelMustermannBerlin) {
			System.out.println("Michael Mustermann ist von Stuttgart nach Berlin umgezogen.");
		}
		if (michaelMustermannStuttgart.equals(michaelMustermannBerlin)) {
			System.out.println("Michael Mustermann Stuttgart und Michael Mustermann Berlin sind gleich.");
		}
		if (michaelMustermannStuttgart == michaelMustermannFrankfurt) {
			System.out.println("Michael Mustermann ist von Stuttgart nach Frankfurt umgezogen.");
		}
		if (michaelMustermannStuttgart.equals(michaelMustermannFrankfurt)) {
			System.out.println("Michael Mustermann Stuttgart und Michael Mustermann Frankfurt sind gleich.");
		}
	}
}

Als Ergebnis steht auf dem Bildschirm:
Code:
Michael Mustermann ist von Stuttgart nach Berlin umgezogen.
Michael Mustermann Stuttgart und Michael Mustermann Berlin sind gleich.
Michael Mustermann Stuttgart und Michael Mustermann Frankfurt sind gleich.

Und das bei equals(null) false als Ergebnis herauskommt, ist ja eigentlich auch klar.
Einmal der Logik wegen: Das Objekt und null sind ja nicht gleich. Wie denn auch?
Und einmal aus programmiertechnischer Sicht: null instanceof <Klasse> ist false, da null ja keine Instanz irgendeiner Klasse ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
DEvent Wie behandelt man Exceptions in Iterator? Allgemeine Java-Themen 2
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
T PDF-Generierung (itext) - läuft unter Eclipse, bei har aber leere Seite Allgemeine Java-Themen 39
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
KaffeeFan FileWriter nur leere Zeilen beschreiben Allgemeine Java-Themen 3
R Leere Verzeichnisse löschen Allgemeine Java-Themen 11
B LEERE JTable MouseListener + popupmenu Allgemeine Java-Themen 2
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
L leere Konsoleneingabe Allgemeine Java-Themen 10
T Drucken von variabel langen Listen (es kommen nur leere Seiten raus) Allgemeine Java-Themen 2
nrg Leere Objektreferenz mit != null vergleichen Allgemeine Java-Themen 4
G POI: Leere Zelle nimmt keinen Type an Allgemeine Java-Themen 8
R ANT Jar Task soll leere Verzeichnisse ignorieren..? Allgemeine Java-Themen 3
G Leere Datei mit PrintWriter trotz flush und close Allgemeine Java-Themen 8
E JExcel- Zugriff auf leere Zellen kommt eine Fehlermeldung Allgemeine Java-Themen 6
G Leere Fenster (Keine Schrift, Reiter/ Buttons) bei Java Allgemeine Java-Themen 5
V Class Document seltsam leere Zeile am Anfang Allgemeine Java-Themen 8
H Leere Tabelle initialisieren Allgemeine Java-Themen 2
ReinerCoder Kombinationsmöglichkeiten der Textfelder berechnen Allgemeine Java-Themen 14
D Textfelder in Applets verschieben Allgemeine Java-Themen 1
V iText Textfelder mit Zahlen! Allgemeine Java-Themen 2
T Textfelder zusammenfassen Allgemeine Java-Themen 4
T Integer und TextFelder Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben