You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX LineChart添加数据时出现NoSuchMethodError问题求助

JavaFX LineChart 添加数据触发 NoSuchMethodError 问题

问题现象

创建LineChart时未添加数据程序可正常运行,一旦添加数据就抛出错误,核心异常信息:

Caused by: java.lang.NoSuchMethodError: 'javafx.beans.value.ObservableValue javafx.beans.property.ObjectProperty.flatMap(java.util.function.Function)'

相关代码

Java控制器代码

package GUI;

import javafx.fxml.FXML;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;

public class GUIStockLinegraphController {
    @FXML
    private LineChart<Number, Number> chart;
    @FXML
    private NumberAxis xAxis;
    @FXML
    private NumberAxis yAxis;

    public void initialize(){
        XYChart.Series<Number, Number> series = new XYChart.Series<>();
        series.setName("Test Chart");

        series.getData().add(new XYChart.Data<>(1, 2)); // 添加此行后触发错误

        chart.getData().add(series);
    }
}

FXML布局代码

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.chart.LineChart?>
<?import javafx.scene.chart.NumberAxis?>
<LineChart fx:id="chart" xmlns="http://javafx.com/fxml/11"
           xmlns:fx="http://javafx.com/fxml/1"
           fx:controller="GUI.GUIStockLinegraphController"
           layoutX="5.0" layoutY="10.0"
           prefHeight="233.0" prefWidth="870.0" >
    <xAxis>
        <NumberAxis side="BOTTOM" fx:id="xAxis"/>
    </xAxis>
    <yAxis>
        <NumberAxis side="LEFT" fx:id="yAxis"/>
    </yAxis>

</LineChart>

完整堆栈信息

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at javafx.graphics@22/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
    at javafx.graphics@22/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1135)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at javafx.graphics@22/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:893)
    at javafx.graphics@22/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
    at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: javafx.fxml.LoadException: 
/F:/chartsDemo/target/classes/GUI/Stock-linegraph.fxml
/F:/chartsDemo/target/classes/GUI/Stock-view.fxml:59

    at javafx.fxml@22/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2727)
    at javafx.fxml@22/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2697)
    at javafx.fxml@22/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2568)
    at javafx.fxml@22/javafx.fxml.FXMLLoader$IncludeElement.constructValue(FXMLLoader.java:1160)
    at javafx.fxml@22/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:759)
    at javafx.fxml@22/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2858)
    at javafx.fxml@22/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2654)
    at javafx.fxml@22/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2568)
    at javafx.fxml@22/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2536)
    at com.example.demo/GUI.GUIMainApplication.start(GUIMainApplication.java:41)
    at javafx.graphics@22/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:839)
    at javafx.graphics@22/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:483)
    at javafx.graphics@22/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:456)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at javafx.graphics@22/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:455)
    at javafx.graphics@22/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at javafx.graphics@22/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics@22/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
    ... 1 more
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
    at javafx.fxml@22/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:84)
    at javafx.fxml@22/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2693)
    ... 17 more
Caused by: java.lang.NoSuchMethodError: 'javafx.beans.value.ObservableValue javafx.beans.property.ObjectProperty.flatMap(java.util.function.Function)'
    at javafx.controls@22/javafx.scene.chart.XYChart$Data$4.invalidated(XYChart.java:1371)
    at javafx.base/javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
    at javafx.base/javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
    at javafx.controls@22/javafx.scene.chart.XYChart$Data.setNode(XYChart.java:1406)
    at javafx.controls@22/javafx.scene.chart.LineChart.createSymbol(LineChart.java:531)
    at javafx.controls@22/javafx.scene.chart.LineChart.seriesAdded(LineChart.java:424)
    at javafx.controls@22/javafx.scene.chart.XYChart.lambda$new$1(XYChart.java:164)
    at javafx.base/com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:164)
    at javafx.base/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:73)
    at javafx.base/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:233)
    at javafx.base/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482)
    at javafx.base/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541)
    at javafx.base/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:205)
    at javafx.base/javafx.collections.ModifiableObservableListBase.add(ModifiableObservableListBase.java:155)
    at java.base/java.util.AbstractList.add(AbstractList.java:113)
    at com.example.demo/GUI.GUIStockLinegraphController.initialize(GUIStockLinegraphController.java:24)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    ... 24 more
Exception running application GUI.GUIMainApplication

当前Maven依赖配置

<dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>22</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>22</version>
        </dependency>
        <dependency>
            <groupId>org.controlsfx</groupId>
            <artifactId>controlsfx</artifactId>
            <version>11.1.2</version>
        </dependency>

解决方案

  1. 统一JavaFX版本:确保所有JavaFX相关依赖(包括隐式引入的javafx.base、javafx.graphics等)版本完全一致,避免版本冲突。可通过Maven命令排查依赖树:

    mvn dependency:tree
    

    若发现旧版JavaFX依赖,在对应依赖中添加排除规则。

  2. 更新ControlsFX版本:ControlsFX 11.1.2仅适配JavaFX 11,与JavaFX 22不兼容。更换为适配JavaFX 22的版本,例如:

    <dependency>
        <groupId>org.controlsfx</groupId>
        <artifactId>controlsfx</artifactId>
        <version>11.2.0</version>
    </dependency>
    
  3. 检查模块化配置:如果是模块化项目,确保module-info.java正确声明依赖:

    module com.example.demo {
        requires javafx.controls;
        requires javafx.fxml;
        requires org.controlsfx.controls;
        opens GUI to javafx.fxml;
        exports GUI;
    }
    
  4. 确认运行时环境:确保运行时使用的JavaFX SDK版本与编译依赖版本一致,避免IDE或构建工具加载了系统中其他版本的JavaFX。

内容的提问来源于stack exchange,提问作者Dog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:04:51