我有一个问题,如果清除编辑器文本并提交然后单击增量或减量按钮,可编辑的JavaFX 8 Spinner会导致未被捕获NullPointerException.这是j8u60 j8u77.幸运的是,递增/递减按钮将陷入压低状态,NPE会继续锁定应用程序.
以下代码为我重现了这个问题:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Spinner;
import javafx.scene.control.SpinnerValueFactory;
import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory;
import javafx.stage.Stage;
public class Test extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage aPrimaryStage) throws Exception {
IntegerSpinnerValueFactory valueFactory = new IntegerSpinnerValueFactory(0, 10);
Spinner<Integer> spinner = new Spinner<>(valueFactory);
spinner.setEditable(true);
aPrimaryStage.setScene(new Scene(spinner));
aPrimaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
运行它,清除文本,按回车键(NullPointerException),单击增量或减量按钮现在也会导致NPE.
任何人都可以确认这是一个JavaFX错误并建议一个解决方法吗?
编辑:异常堆栈跟踪
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at javafx.scene.control.SpinnerValueFactory$IntegerSpinnerValueFactory.lambda$new$215(SpinnerValueFactory.java:475)
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:361)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105) …Run Code Online (Sandbox Code Playgroud) 我在Java 8u40中测试了Spinner控件
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Spinner;
import javafx.scene.control.SpinnerValueFactory;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class MainApp extends Application
{
public static void main(String[] args)
{
Application.launch(args);
}
@Override
public void start(Stage stage)
{
final Spinner spinner = new Spinner();
spinner.setValueFactory(new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 10000));
spinner.setEditable(true);
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(10));
int row = 0;
grid.add(new Label("Spinner:"), 0, row);
grid.add(spinner, 1, row);
Scene scene = new Scene(grid, 350, 300);
stage.setTitle("Hello Spinner");
stage.setScene(scene);
stage.show();
} …Run Code Online (Sandbox Code Playgroud)