当前位置: 首页 > 知识库问答 >
问题:

当我试图将数据放入JavaFX散点图时,为什么会得到IndexOutOfBoundsException?

宗苗宣
2023-03-14

我遇到了JavaFX ScatterChart组件的一个令人讨厌的错误。我想创建一个图表,不断得到更多的点添加到它。为此,我首先创建一个新系列,将其添加到图表中,然后开始向该系列添加点。

这在Linechart中工作得很好。然而,由于某种原因,当我试图对散点图执行同样的操作时,会得到IndexOutOfBoundsException

下面是一个针对这种情况的独立测试用例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;

public class Test extends Application {
    @Override 
    public void start(Stage stage) {
        stage.setTitle("Scatter Chart");

        NumberAxis xAxis = new NumberAxis(0, 10, 1);
        NumberAxis yAxis = new NumberAxis(0, 10, 1);        
        ScatterChart<Number, Number> chart = new ScatterChart<Number, Number>(xAxis,yAxis);

        XYChart.Series<Number, Number> series = new XYChart.Series<Number, Number>();
        chart.getData().add(series);
        series.getData().add(new XYChart.Data<Number, Number>(4.2, 2.4));

        Scene scene  = new Scene(chart, 500, 400);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

以下是例外情况的相关部分:

Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:208)
at javafx.scene.chart.ScatterChart.updateLegend(ScatterChart.java:188)
at javafx.scene.chart.XYChart$2.onChanged(XYChart.java:132)
at com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:134)
at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:48)
at com.sun.javafx.collections.ObservableListWrapper.callObservers(ObservableListWrapper.java:97)
at com.sun.javafx.collections.ObservableListWrapper.add(ObservableListWrapper.java:154)
at com.sun.javafx.collections.ObservableListWrapper.add(ObservableListWrapper.java:144)
at Test.start(Test.java:20)

有人知道为什么会这样吗?

共有1个答案

华良平
2023-03-14

如果这是一个bug,您可以在JavaFX JIRA中存档。
解决方法是最后添加系列:

series.getData().add(new XYChart.Data<Number, Number>(4.2, 2.4));
chart.getData().add(series);
 类似资料:
  • 我还尝试了,,JMeter获得了多达8000个示例,最大时间12000ms(超时30s),并给出了错误。在拒绝之前,它至少应该排队10,000个连接。

  • 问题内容: 考虑: 我收到了一个未报告的异常: 以及: 我该如何解决这些问题? 问题答案: 你所有的问题都源于此 包含在try,catch块中的问题是,如果程序发现异常,则不返回任何内容。这样写(按照程序逻辑进行修改): 对于第二个,你必须从方法调用中捕获 ,如下所示(也可以在程序逻辑上对其进行修改): 你必须从中吸取教训: 具有返回类型的方法必须始终返回该类型的对象,我的意思是在所有可能的情况下

  • 我安装了apache-jmeter-5.1.1和java 1.8.0_221(8),并在GUI中浏览了构建Web测试计划的入门指南。但是当我单击保存以保存测试计划时,我收到以下错误: 未捕获异常。lang.NoClassDefFoundError:无法初始化类组织。阿帕奇。杰米。gui。util。文件对话框。有关详细信息,请参阅日志文件。 调试器中的完整输出: 你知道怎么解决吗?

  • 我有一个异步方法,它调用另一个异步方法,但是,我希望它在单独的线程上并行运行: 事实上,这就是我正在努力做的。为什么我会收到编译器警告?task.run的语法不正确吗?

  • 问题内容: 我想从文件中读取数据,但是在调用method 时得到了。即使我正在使用该方法,但它不起作用。 txt文件的第一行是: 问题答案: 怪罪法国语言环境:它使用逗号作为小数点分隔符,因此无法解析。 替换为可修复问题(演示1)。如果您想解析,请使用代替(demo 2 )。 您的代码中的第二个问题是使用用作分隔符。您应该使用单个反斜杠,否则包含的单词将破坏您的解析逻辑。

  • 问题内容: 我无法用自己的数据填充JavaFX TableView对象。我试图修改此处找到的代码以适合我的程序的需求。我添加了该教程中使用的表,它可以正确显示。我复制了该代码以创建第二个表,但是无法使我的数据显示在第二个表中。 我相信我已经正确修改了代码以接受来自SNMPInterface类的数据。我尝试用静态数据填充表,然后再使用从文件读取的数据填充表。尽管这两个过程都将创建具有适当标题的列,但