栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaFX LineChart-轴类型导致的ClassCastException

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaFX LineChart-轴类型导致的ClassCastException

这对我来说很好。我使用以下FXML进行了测试:

<?xml version="1.0" encoding="UTF-8"?><?import javafx.scene.layout.AnchorPane?><?import javafx.scene.chart.LineChart?><?import javafx.scene.chart.NumberAxis?><AnchorPane xmlns:fx="http://javafx.com/fxml">    <LineChart fx:id="testChart">    <xAxis><NumberAxis /></xAxis>    <yAxis><NumberAxis /></yAxis>    </LineChart></AnchorPane>

并测试应用程序:

import javafx.application.Application;import javafx.scene.Scene;import javafx.stage.Stage;public class Main extends Application {    @Override    public void start(Stage primaryStage) {        try { TestChart chart = new TestChart(); Scene scene = new Scene(chart.getAnchorPane(), 600, 400); primaryStage.setScene(scene); primaryStage.show();        } catch(Exception e) { e.printStackTrace();        }    }    public static void main(String[] args) {        launch(args);    }}

很难说清楚为什么

ClassCastException
看不到FXML文件(尤其是所使用的轴),这是很难的。但是,从堆栈跟踪中可以看出,您正在使用
CategoryAxis
,与的类型不兼容
LineChart<Number,Number>

通常,您可以将两种数据类型(一种用于x,一种用于y)声明为所需的任何类型。自从你宣布

@FXMLprivate LineChart<Number, Number> testChart ;

x变量的类型和y变量的类型均为

Number

参照Javadocs的

LineChart
,a
LineChart<X,Y>
要求
Axis<X>
x轴和
Axis<Y>
y轴。因此
Axis<Number>
,每个轴都需要一个。A
CategoryAxis
是一个
Axis<String>
(再次,请参考Javadocs),因此它不能用作折线图的轴:该轴的数据类型与该图表的数据类型不兼容。

如果您在Java中尝试了以下操作:

LineChart<Number, Number> testChart ;testChart = new LineChart<>(new CategoryAxis(), new NumberAxis());

你会得到一个编译错误。由于(大概)要在FXML中初始化轴,并且FXML没有类型检查,因此可以

ClassCastException
在运行时获取。

可以帮助您的代码的一件事是使用正确键入的代码

Series

private XYChart.Series<Number, Number> getDummyData(){    final XYChart.Series<Number, Number> series = new XYChart.Series<>();    series.setName("My portfolio");    // ...}

现在,编译器将检查

Series
匹配类型是否与图表类型
Data
匹配,以及匹配类型是否与图表类型匹配
Series
。(因此
series.getData().add(newXYChart.Data("1",23));
会产生编译错误,而不是运行时错误。)由于您是在FXML中创建轴的,因此仍然没有对这些轴进行类型检查,但我认为错误的原因(也许)会更加清楚。

解决方法是使用

NumberAxis
,如上面的示例所示,而不是您的
CategoryAxis
。如果您确实想
CategoryAxis
在x轴上使用a
,则x值必须为
String
s,因此您需要将
LineChart
as 声明为a
LineChart<String,Number>
。同样,您将制作
Series
一个
Series<String, Number>



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498383.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号