Javafx 微调器中的NumberFormatException

Javafx 微调器中的NumberFormatException,javafx,spinner,numberformatexception,Javafx,Spinner,Numberformatexception,我的“初始化”方法中有类似的内容: SpinnerValueFactory betaValueFactory=新的SpinnerValueFactory.DoubleSpinnerValueFactory(-99999999,0); 这个.betaSpiner.setValueFactory(betaValueFactory); SpinnerValueFactory temperatureValueFactory=新的SpinnerValueFactory.IntegerSpinnerValu

我的“初始化”方法中有类似的内容:

SpinnerValueFactory betaValueFactory=新的SpinnerValueFactory.DoubleSpinnerValueFactory(-99999999,0);
这个.betaSpiner.setValueFactory(betaValueFactory);
SpinnerValueFactory temperatureValueFactory=新的SpinnerValueFactory.IntegerSpinnerValueFactory(-99999999,0);
此.TemperaturesInsider.setValueFactory(temperatureValueFactory);
问题是,当用户在其中一个微调器中键入错误的内容(如“aaa”)时,我有一个例外,如下所示:

Exception in thread "JavaFX Application Thread" java.lang.NumberFormatException: For input string: "aaa"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
    at java.base/java.lang.Integer.parseInt(Integer.java:658)
    at java.base/java.lang.Integer.valueOf(Integer.java:989)
    at javafx.base/javafx.util.converter.IntegerStringConverter.fromString(IntegerStringConverter.java:49)
    at javafx.base/javafx.util.converter.IntegerStringConverter.fromString(IntegerStringConverter.java:35)
    at javafx.controls/javafx.scene.control.Spinner.commitValue(Spinner.java:460)
    at javafx.controls/javafx.scene.control.Spinner.lambda$new$3(Spinner.java:168)
    at javafx.base/com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:348)
    at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
    at javafx.base/javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
    at javafx.graphics/javafx.scene.Node$FocusedProperty.notifyListeners(Node.java:8159)
    at javafx.graphics/javafx.scene.Node.setFocused(Node.java:8212)
    at javafx.graphics/javafx.scene.Scene$KeyHandler.setWindowFocused(Scene.java:4038)
    at javafx.graphics/javafx.scene.Scene$KeyHandler.lambda$new$0(Scene.java:4060)
    at javafx.base/com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:348)
    at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
    at javafx.base/javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
    at javafx.base/javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:103)
    at javafx.base/javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:111)
    at javafx.base/javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:145)
    at javafx.graphics/javafx.stage.Window.setFocused(Window.java:674)
    at javafx.graphics/javafx.stage.Window$1.setFocused(Window.java:149)
    at javafx.graphics/com.sun.javafx.stage.WindowHelper.setFocused(WindowHelper.java:112)
    at javafx.graphics/com.sun.javafx.stage.WindowPeerListener.changedFocused(WindowPeerListener.java:64)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:126)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:40)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.lambda$handleWindowEvent$4(GlassWindowEventHandler.java:176)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.handleWindowEvent(GlassWindowEventHandler.java:174)
    at javafx.graphics/com.sun.glass.ui.Window.handleWindowEvent(Window.java:1351)
    at javafx.graphics/com.sun.glass.ui.Window.notifyFocus(Window.java:1330)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:830)
我想通过显示带有一条小消息的警报来强制用户键入正确的值来解决这个问题,但我不知道如何做到这一点,这就是我需要您的原因。
感谢您的帮助。

简单地说(现在没有时间给出完整的答案,但可能其他人会跟进此评论),创建一个只允许整数表示的,并将其传递给
betaSpinner.getEditor().setTextFormatter(…)
它终于成功了,谢谢您的帮助!但我现在有另一个问题,当我在带有DoubleSpinnerValueFactory的微调器中输入一个像“1.2”这样的值时,它会自动将其转换为“1.0”,唯一有效的是“1,2”而不是“1.2”,但我愿意接受这两个值。你知道我怎么做吗?