2015-09-30 8 views
5

für meine JavaFx-Anwendung Ich möchte überprüfen, ob die TextFields leer sind, und falls ja, warne den Benutzer. Dies sind die Textfelder:Wie überprüft man, ob das Textfeld leer ist?

VBox fields = new VBox(); 
Text usernametext = new Text("User name"); 
TextField user_name = new TextField(); 
Text firstnametext = new Text("First name"); 
TextField first_name = new TextField(); 
Text lastnametext = new Text("Last name"); 
TextField last_name = new TextField(); 
Text ibantext = new Text("IBAN"); 
TextField iban = new TextField(); 
Text passwordtext = new Text("Password"); 
TextField password = new TextField(); 
Text confirmpasstext = new Text("Confirm password"); 
TextField confirmpass = new TextField(); 
Button createBtn = new Button("Create account"); 

jetzt wollte ich nur auf einem Textfeld die Validierung testen. dies ist meine Validierungsfunktion, die den createBtn verbunden:

public void validation(){     

    if(user_name.getText().trim().isEmpty()){ 
     Alert fail= new Alert(AlertType.INFORMATION); 
     fail.setHeaderText("failure"); 
     fail.setContentText("you havent typed something"); 
     fail.showAndWait(); 
    } else { 
     Alert alert = new Alert(AlertType.INFORMATION); 
     alert.setHeaderText("Succes"); 
     alert.setContentText("Account succesfully created!"); 
     alert.showAndWait(); 
    } 
} 

Aber ich bekomme diese Fehlermeldung, wie ich den ‚Konto erstellen‘ Knopf drücken:

Exception in thread "JavaFX Application Thread" 

java.lang.NullPointerException 
    at opdracht1.Opdracht1.validation(Opdracht1.java:36) 
    at opdracht1.Opdracht1$2$1.handle(Opdracht1.java:103) 
    at opdracht1.Opdracht1$2$1.handle(Opdracht1.java:98) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Node.fireEvent(Node.java:8411) 
    at javafx.scene.control.Button.fire(Button.java:185) 
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:352) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$355(GlassViewEventHandler.java:388) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387) 
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
    at com.sun.glass.ui.View.notifyMouse(View.java:937) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 

Vielen Dank im Voraus!

+0

Können Sie bitte sagen, welche Zeile 36 von 'Opdracht1.java'? – ItachiUchiha

+0

@ItachiUchiha if (benutzername.getText(). Trim(). IsEmpty()) { – user3660293

+0

Dann wird erwartet, dass user_name null ist. Überprüfen Sie Ihren Code an der Stelle, an der Sie ihn auf null setzen können, oder Sie haben möglicherweise mehrere Variablen mit demselben Namen. –

Antwort

7

Zuerst prüfen, ob user_name nicht null ist. Wenn dies nicht der Fall ist, setzen Sie einen null Textwert auf die JavaFX-Komponente irgendwo in Ihrem Code.

if(user_name.getText().trim().isEmpty()){

In jedem Fall ist die trim() auf ein null Wert anwenden, was Ihre Ausnahme verursacht. Sie sollten dies nicht benötigen (siehe Uluk Biy 's Kommentar zu dieser Antwort), aber wenn Sie ein user_name TextField erstellt haben, müssen Sie zuerst überprüfen, ob die getText() Methode nicht null ist.

So etwas sollte es tun:

if (user_name.getText() == null || user_name.getText().trim().isEmpty()) { 
    // your code here 
} 
+2

Der 'user_name.getText()' kann nicht null sein, da der Standardkonstruktor von 'TextField' den Anfangstext auf" "(leere Zeichenfolge) setzt. –

+0

Absolut richtig. Allerdings muss er irgendwo im Programm einen Nullwert setzen; es ist die einzige Möglichkeit, einen Nullzeiger in der erwähnten Zeile zu erhalten. –

+0

"" wird auf Text gesetzt, wenn das übergebene Argument für setText() null ist. Also GetText() sichergestellt, dass nicht sowieso null zurückgeben. NPE tritt auf, wenn Benutzername für die angegebene Zeile ebenfalls null ist. –

0

Dieses einfach überprüft werden kann durch

if(textField.getText().trim().equals("")) 
{ 
system.out.println("textField is empty"); 
} 
-1

Sie diesen Code testen können den Namen meines champs mit dem Namen Ihres TextFeild ersetzen

if ((nom_pt.getText().toString().compareTo("") == 0) || 
    (prenom_pt.getText().toString().compareTo("") == 0) || 
    (cin_pt.getText().toString().compareTo("") == 0) || 
    (gsm_pt.getText().toString().compareTo("") == 0)) { 

    JOptionPane.showMessageDialog(null, "champs vide"); 

} else { JOptionPane.showMessageDialog(null, "Enregistrement a été ajouter"); } 
0

können Sie Button disableProperty verwenden, um mit TextField zu binden. Wenn das Textfeld leer ist, wird die Schaltfläche deaktiviert, andernfalls wird sie aktiviert.

Verwendung Code unten

erwähnt
createBtn.disableProperty().bind(
    Bindings.createBooleanBinding(() -> 
     user_name.getText().trim().isEmpty(), user_name.textProperty() 
    ) 
    // If you want to check more text field, use it as by removing comments 
    //.or( Bindings.createBooleanBinding(
    //   first_name.getText.trim().isEmpty(), first_name.textProperty() 
    // ) 
    // ) 

); 
0

In Ordnung, das ist, wie ich es getan hätte und es funktioniert.

Wenn bei keinem der oben genannten Arbeiten, versuchen Sie Folgendes:

ein String-Variable erstellen, lassen Sie sich String username sagen; Als nächstes versuchen Sie Folgendes:

if(username.trim().isEmpty()) 

Der ursprüngliche Vorschlag nicht für mich arbeiten, aber die Zeichenfolge tat erstellen, so dass, wenn die oben genannten Vorschläge nicht für Sie arbeiten, ist dies ein Schuss.

0

textField.getText(). Trim(). Equals ("")

obige Aussage wie ein Zauber für mich gearbeitet.

+0

Während dieses Code-Snippet die Frage lösen kann, [hilft eine Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, um die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. – Ferrrmolina