netbeans JavaFX LineChart错误:“FXML加载程序无法创建javafx.scene.chart.LineChart的文件夹,(Java 11,JavaFX 17)

omqzjyyz  于 12个月前  发布在  Java
关注(0)|答案(3)|浏览(137)

在过去的一周左右,我正在将我的JavaFX项目从Java 8迁移到Java 11,JavaFX 17。我也从Scenebuilder 8.5迁移到Scenebuilder JavaFX版本:20.0.1.总的来说,它相当顺利,但是我面临着一个令人困惑的错误,我似乎无法解决。

Instances of `javafx.scene.chart.LineChart` cannot be created by FXML loader.

当我将项目的Java版本更改为Java 11,并将JavaFX 17库导入到项目中时,我在项目中使用的LineChart开始在FXML文档文件中抛出一个我以前从未见过的错误。这是一个330行的文件,所以我只包括相关的部分:

<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.LineChart?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.effect.DropShadow?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Line?>

<LineChart fx:id="chartDashboardLineChart" layoutX="5.0" layoutY="10.0" prefHeight="233.0" prefWidth="870.0" title="Monthly Sales">
   <xAxis>
     <CategoryAxis side="BOTTOM" fx:id="x" />
   </xAxis>
   <yAxis>
     <NumberAxis fx:id="y" side="LEFT" />
   </yAxis>
</LineChart>

错误显示在声明LineChartchartDashboardLineChart的行下。还有两个新的错误,内容如下:类javafx.scene.chart.LineChart不支持属性xAxisyAxis也是如此)。这两个错误似乎比上面的FXML Loader错误更令人担忧。我还将包括我的项目中的相关代码行,尽管我认为错误更有可能存在于FXML文档中。下面是Java代码(分为两个不同的类:Class: LineCharts.java
还有另一个类,这个类太大了,不能完整地发布,叫做DashboardController.java,下面是DashboardController类的相关部分:

@FXML
private LineChart<?, ?> chartDashboardLineChart;
@FXML
private CategoryAxis x;
@FXML
private NumberAxis y;
LineCharts LC = new LineCharts();

//later on in the initialize area of the code

//Call the initializeLineChart method and pass the line chart as an argument
LC.generateDashboardLineChart(chartDashboardLineChart);

我尝试了很多方法来解决这个问题,但没有成功。这似乎是一个罕见的问题,因为有很少或没有信息,我可以在网上找到。
我感谢任何帮助或任何理论,是什么导致我的问题,以及如何解决它。谢谢你,谢谢!

5lhxktic

5lhxktic1#

我无法通过运行应用程序或在SceneBuilder中复制这一点。
验证以下代码在您的环境中是否有效。

测试环境

执行环境:

OS X 13.4.1, JavaFX 20.0.2, OpenJDK 19.0.2

SceneBuilder版本(从“关于”屏幕):

Product Version
JavaFX Scene Builder 19.0.0

Build Information
Version 19.0.0
Date: 2022-10-07 07:42:50
JavaFX Version: 19
Java Version: 17, OpenJDK Runtime Environment

测试申请

  • line-chart.fxml*
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.LineChart?>
<?import javafx.scene.chart.NumberAxis?>

<LineChart fx:controller="com.test.demo.chart.ChartController"
           xmlns="http://javafx.com/javafx" 
           xmlns:fx="http://javafx.com/fxml" 
           fx:id="chartDashboardLineChart" 
           layoutX="5.0" layoutY="10.0" 
           prefHeight="233.0" prefWidth="870.0" 
           title="Monthly Sales">
    <xAxis>
        <CategoryAxis side="BOTTOM" fx:id="x" />
    </xAxis>
    <yAxis>
        <NumberAxis fx:id="y" side="LEFT" />
    </yAxis>
</LineChart>
  • ChartController.java*
package com.test.demo.chart;

import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;

public class ChartController {
    public LineChart<String, Double> chartDashboardLineChart;
    public CategoryAxis x;
    public NumberAxis y;
}
  • LineChartApp.java*
package com.test.demo.chart;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class LineChartApp extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader loader = new FXMLLoader(
                LineChartApp.class.getResource(
                        "line-chart.fxml"
                )
        );

        stage.setScene(
                new Scene(
                        loader.load()
                )
        );
        stage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}
  • 输出 *

iswrvxsc

iswrvxsc2#

我可以使用MacOS 12.6、JDK 17.0.8、SceneBuilder 19、此 Status Application 或此Test Application以及NetBeans 18(带有提到herehere的JavaFX 2 v1.37插件)重现这一发现。由于插件已经过时,停用它是一个简单的解决办法。这样做消除了(虚假的)错误和警告。

参考上面引用的 line-chart.fxml

5: Instances of `javafx.scene.chart.LineChart` cannot be created by FXML loader.
12: Class `javafx.scene.chart.LineChart` does not support property `xAxis`.
15: Class `javafx.scene.chart.LineChart` does not support property `yAxis`.
ecfsfe2w

ecfsfe2w3#

这是一个非常奇怪的错误;虽然错误仍然显示在FXML文档中的netbeans(13)上,但似乎当我运行该项目时,折线图无论如何都能正常工作。下面是一个屏幕截图,显示了netbeans的错误:

下面是一个图像,显示它运行并显示折线图,无论:!

感谢所有提出建议的人,我非常感激。我仍然不明白为什么错误会显示在FXML文档中,但最终它似乎并没有影响我的项目。

相关问题