Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFXFXML控制器ClassNotFoundException_Java_Uitableview_Dynamic_Javafx - Fatal编程技术网

JavaFXFXML控制器ClassNotFoundException

JavaFXFXML控制器ClassNotFoundException,java,uitableview,dynamic,javafx,Java,Uitableview,Dynamic,Javafx,我正试图在JavaFX中获得一个TableView来动态显示内容 当我运行程序时,出现以下错误: java.lang.ClassNotFoundException: UserInterfaceController 我的控制器名为“UserInterfaceController.java”,它与FXML文件位于同一个包中,我也在FXML中导入了该包。为什么找不到控制器 FXML文件: <?import javafx.collections.*?> <?import javaf

我正试图在JavaFX中获得一个TableView来动态显示内容

当我运行程序时,出现以下错误:

java.lang.ClassNotFoundException: UserInterfaceController
我的控制器名为“UserInterfaceController.java”,它与FXML文件位于同一个包中,我也在FXML中导入了该包。为什么找不到控制器

FXML文件:

<?import javafx.collections.*?> 
<?import javafx.geometry.Insets?>
<?import java.lang.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.cell.*?>
<?import javafx.scene.layout.*?>
<?import d1example2.*?>

<GridPane alignment="center" hgap="10.0" vgap="10.0" fx:controller="UserInterfaceController"
             xmlns:fx="http://javafx.com/fxml">
     <TableView fx:id="tableView" GridPane.columnIndex="0" GridPane.rowIndex="1">
          <columns>
          </columns>    
     </TableView>
</GridPane>

从FXML使用控制器的完全限定名引用控制器:

fx:controller="d1example2.UserInterfaceController"
后续问题的答案

以下问题的答案解释了为什么会这样,但您不必理解为什么如果您不想这样做,以下内容纯粹是信息性的


当他有进口声明时,为什么它必须是完全合格的

解析FXML控制器类时,不会搜索FXML文件中的导入。控制器类类型是通过类加载器找到的(我通过读取。类加载器需要一个完全限定的名称(具体地说,根据Java语言规范,是一个完全限定的名称)

一旦找到类型,如果没有为fxml加载指定控制器工厂,则FXMLLoader将使用反射实例化控制器本身,否则它将把该作业委托给适当的控制器工厂(例如,基于Spring依赖项注入关联控制器实例的控制器工厂)但即使在这种情况下,也必须首先由FXMLLoader找到并确定适当的类型,要做到这一点,它需要为控制器提供一个完全限定的类名

如果我需要这样做,导入语句的意义何在

导入语句用于与文档中的FXML元素相对应。这样,文档可以包含以下行:

<?import javafx.scene.layout.*?>

当您想在FXML中定义一个新的GridPane时,您可以只引用GridPane而不是javafx.scene.layout.GridPane

<GridPane alignment="center" ...>


是的,FXMLLoader可能也被编码为以相同的方式解析控制器类,但在编写此答案时,它还没有以这种方式编写。

有解决方案吗?面对完全相同的问题。奇怪的是,完全相同的代码在1天前工作:/当他有一个导入语句时,为什么它必须是完全限定的?这个答案可以更详细,解释为什么发布的源代码是一个问题。我找不到任何说明控制员必须完全合格的文件。如果我需要这样做,导入语句的意义何在?更新了答案,以解决评论中的一些附加问题。
<?import javafx.scene.layout.*?>
<GridPane alignment="center" ...>