焦点不会丢失在System.exit上

时间:2015-02-08 16:30:30

标签: javafx focus changelistener system.exit

我有一些TextFields在失去焦点时执行操作。 我将ChangeListener附加到他们的focussedProperty,一切正常。 但是当我使用System.exit(0)离开应用程序时,没有执行最终的更改。 这是我的听众:

public abstract  class TextUpdateListener implements ChangeListener<Boolean> {

private TextField field ;
private String initialText ;
private StringProperty text ;

    protected TextUpdateListener(TextField field){
        this.field = field ;
        initialText = "";
        text = field.textProperty();

    }
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue,
            Boolean newValue) {
            if(newValue == true){
                System.out.println("focus gained");
                initialText = field.getText().trim();
                System.out.println("Text on focus gained : "+text.get());
                System.out.println("InitialText on focus gained : "+initialText);

            }
            if(newValue == false){
                System.out.println("Text on focus lost : "+text.get());
                if(initialText.isEmpty()){
                    if( ! text.get().isEmpty()){
                        onCreated();
                    }

                }
                if(! initialText.isEmpty()){
                    if(text.get().isEmpty()){
                        onDeleted();

                    }
                    else if(! text.get().equals(initialText)){
                        onChanged();

                    }
                }
            }
    }
    public String getInitialText(){
        return initialText ;

    }
    public TextField getField(){
        return field ;

    }
    public abstract void onDeleted();

    public abstract void onChanged();

    public abstract void onCreated();

}

我真的很感激一些帮助!

1 个答案:

答案 0 :(得分:0)

调用System.exit(...)(或Platform.exit())后,不会处理任何新事件。

如果您希望在应用程序关闭时运行代码:

  1. 致电Platform.exit()而非System.exit(...)退出申请
  2. 覆盖stop() method in your Application subclass,并实现在那里执行所需的代码。