2016-12-19 103 views
0

個人的なプロジェクトでは、markitondemand.comから株データを問題なく取り出します。オブジェクトでは、値フィールドにHashMapという値を格納します。JavaFX Linechart ClassCastException文字列への整数

ここで、そのオブジェクトの値を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) 

は自分自身のコードへのリンクはありませんので、私は、この問題を解決する方法がわかりません。私は、折れ線グラフのデータとして使用されているシリーズに追加することができますので、これらの値を超える Values for object from Apple's stock

Iループ:

これは、Appleのためにフェッチされた値の印刷画面です。 コードの例:以下のように マイ折れ線グラフが宣言さ

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

(stockToDraw.getValues()がスクリーンショットに表示された値を返す):上記のコードサンプルと

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>(); 

、IはClassCastExceptionが取得しますIntegerをStringにキャストすることはできませんが、この問題の解決方法はわかりません。

ありがとうございます!コメントで言及されているものとして

EDIT

、スタックトレースはれる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> 
+0

それはstockToDraw.getValues 'のように見える()を取得(キー)'文字列を返し、あなたは数としてそれを使用しようとしています。 – markbernard

+0

stockToDrawはのHashMapですか? – Steven

+0

@Steven Nope、HashMap Jules

答えて

0

@James_Dはコメントで指摘されていたので、折れ線グラフを複数回初期化していました。

私は初期化子を削除し、私はすべての必要な場所でXYChart.Series<String, Double>XYChart.Series<Number, Number>を変更した後

@FXML 
LineChart<String, Double> lineChart; 

にそれを変更しました。私はそれが次の結果を持って試験この後

は: Result of working linechart