JavaFX : New SpinnerValueFactory results in StackOverflow

标签 java javafx-8 spinner

我有一个 foreach 循环创建大约 180 个 Pane 并初始化它们。 Pane 的一部分是一个旋转器。对于每个微调器都会创建一个新的 SpinnerValueFactory:

SpinnerValueFactory factory = new SpinnerValueFactory.IntegerSpinnerValueFactory(0, products.get(i).getStock());
//getStock() returns an integer between 0 and 300

每 6 次执行 foreach 循环,我都会收到以下错误:

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.StackOverflowError (the following lines repeat)
    at javafx.scene.control.SpinnerValueFactory$IntegerSpinnerValueFactory.lambda$new$215(SpinnerValueFactory.java:475)
    at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
    at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
    at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
    at javafx.scene.control.SpinnerValueFactory.setValue(SpinnerValueFactory.java:150)
at javafx.scene.control.SpinnerValueFactory$IntegerSpinnerValueFactory.lambda$new$215(SpinnerValueFactory.java:478)(...)

由于 StackOverflow,Java 似乎停止创建新的 SpinnerValueFactories。然后,Java 尝试将工厂设置为微调器,但由于不存在工厂,因此会打印更多错误。 如果我删除方法调用,则不会发生错误:

SpinnerValueFactory factory = new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 5);

该项目嵌套在数据库、FXML 文件、 Controller 和启动类中。我尝试制作一个最小的示例,但是删除除缩短方法之外的所有内容都不会导致错误。有趣的是,我的一个 friend 使用相同的项目和相同的 SDK 没有遇到任何错误。对我来说,这似乎也很奇怪,因为在发生 StackOverflow 之前,需要执行 6 次 foreach 循环,而第二个版本则创建所有 180 个 Pane ,没有任何问题。为什么只有调用 getStock() 时才会出现 StackOverflow?

最佳答案

我使用 IDE 的调试器(实际上是第一次),找到了设置“Java 异常断点”的选项。它向我的异常(exception)添加了一些信息: /image/jGc7J.png

Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate java.lang.Integer.toString()
value=-2

显然,我将工厂的最小值设置为 0,并尝试将最大值设置为 -2,但这是行不通的。我更改了数据库中的值,现在工作正常。这是多么令人尴尬的错误啊。感谢您的帮助!

关于JavaFX : New SpinnerValueFactory results in StackOverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38420147/

相关文章:

java - 从 JAVA 到 Sharepoint 2013 REST API 的基本身份验证

javafx - 将图形设置为标签

java - 自定义JavaFX(JDK 8)中的现有控件

ios - 如何在 UI 工作中显示微调器?

android - setOnItemClickListener 不适用于 Android Spinner

android - 使用 JSON 填充 Spinner

java 。比较网页结构 (dom) 的相似性。

java - 将原生查询重构为 JPQL 查询

Java 属性文件替换检索到的字符串

javafx - 表单验证器消息