ObservableListWrapper中的JavaFX2 StackOverflowError

时间:2014-03-10 03:42:55

标签: java javafx-2

我正在尝试在文本字段上使用过滤器。问题是我得到了一个例外:

java.lang.StackOverflowError at
com.sun.javafx.collections.ObservableListWrapper.size(ObservableListWrapper.java:335)

我无法理解为什么会抛出异常,因为我有类似的代码并且没有StackOverflowError。我认为setText()一次又一次地调用监听器,但为什么我之前没有出现类似代码的错误?

public static void addNumericFilter(final TextField tf) {
    tf.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> value, String oldValue, String newValue) {
            //System.out.println("text = " + tf.getText());
            System.out.println("value = " + value.getValue());
            System.out.println("oldValue = " + oldValue);
            System.out.println("newValue = " + newValue);

            try {
                Integer.parseInt(value.getValue());
            } catch (NumberFormatException ex) {
                tf.setText(oldValue);
            }
        }
    });
}

这段代码完美无缺,例如(为什么这里没有堆栈溢出?):

public static void addUpperCaseFilter(final TextField tf) {
    tf.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> value, String oldValue, String newValue) {
            tf.setText(value.getValue().toUpperCase());
        }
    });
}

0 个答案:

没有答案