JavaFX 线图 ClassCastException 整数到字符串

标签 java javafx classcastexception

对于个人项目,我创建了一个程序,可以毫无问题地从 markitondemand.com 获取股票数据。在一个对象中,我将一些值存储在作为 HashMap 的值字段中。

现在我想在 JavaFX 的折线图中显示该对象的值。目前我有以下异常:

Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at javafx.scene.chart.CategoryAxis.calculateRequiredSize(CategoryAxis.java:378)
at javafx.scene.chart.CategoryAxis.autoRange(CategoryAxis.java:363)
at javafx.scene.chart.Axis.computePrefHeight(Axis.java:577)
at javafx.scene.Parent.prefHeight(Parent.java:927)
at javafx.scene.layout.Region.prefHeight(Region.java:1435)
at javafx.scene.chart.XYChart.layoutChartChildren(XYChart.java:687)
at javafx.scene.chart.Chart$1.layoutChildren(Chart.java:94)
at javafx.scene.Parent.layout(Parent.java:1079)
at javafx.scene.Parent.layout(Parent.java:1085)
at javafx.scene.Parent.layout(Parent.java:1085)
at javafx.scene.Scene.doLayoutPass(Scene.java:552)
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2397)
at com.sun.javafx.tk.Toolkit.lambda$runPulse$31(Toolkit.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:354)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:381)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:510)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$405(QuantumToolkit.java:319)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)

在堆栈跟踪中没有链接到我自己的代码,所以我不知道如何解决这个问题。

这是为 Apple 获取的值的打印屏幕: Values for object from Apple's stock

我遍历这些值,以便将它们添加到用作折线图数据的系列中。 代码示例: (stockToDraw.getValues() 返回截图中显示的值)

int i = 1;
    for(String key : stockToDraw.getValues().keySet()) {
        series.getData().add(new XYChart.Data<Number, Number>(i, stockToDraw.getValues().get(key)));
        i++;
    }

我的折线图声明如下:

final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();

@FXML
LineChart<Number, Number> lineChart = new LineChart<Number, Number>(xAxis, yAxis);

XYChart.Series<Number, Number> series = new XYChart.Series<Number, Number>();

通过上面的代码示例,我得到了一个 ClassCastException,即无法将 Integer 转换为 String,但我不知道如何解决这个问题。

提前致谢!

编辑

如评论中所述,堆栈跟踪引用了 CategoryAxis。该轴包含在 FXML 代码中,如下所示:

<LineChart fx:id="lineChart" layoutX="9.0" layoutY="120.0" prefHeight="470.0" prefWidth="581.0">
    <xAxis>
      <CategoryAxis label="Days" side="BOTTOM" />
    </xAxis>
    <yAxis>
      <NumberAxis label="Value" side="LEFT" />
    </yAxis>
  </LineChart>

最佳答案

正如@James_D 在评论中指出的那样,我多次初始化折线图。

我删除了初始化器并将其更改为

@FXML
LineChart<String, Double> lineChart;

在那之后我改变了XYChart.Series<Number, Number>XYChart.Series<String, Double>在所有需要的地方。

在此之后我进行了测试,结果如下: Result of working linechart

关于JavaFX 线图 ClassCastException 整数到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41226155/

相关文章:

java - 枚举中的特殊字符

JavaFX - 注册成功的反馈

java - 如何更改 JavaFX 中的 TableView 框架颜色?

Java 使用 BeanBinding Netbeans 更新 JList

java.lang.ClassCastException : java. lang.String 无法转换为 org.myapp.ui.MyClass

java - 在 Java 中进行对象到对象转换的简单/优雅的方法?

java - org.hibernate.id.IdentifierGenerationException : while saving data in one to one mapping

java - 是否可以使未展开的 Accordion Pane 点击通过?

java - 错误的泛型转换没有 ClassCastException [Java]

java - Java 文档中 ExecutorService 方法 shutdown() 的矛盾