当前位置: 首页 > 知识库问答 >
问题:

java.lang.ClassNotFoundException无法到达控制器[重复]

宗政元青
2023-03-14

为了好玩,我一直在用java、javafx和scene builder做一个自己的项目。不幸的是,我遇到了一个无法修复的问题。我有一个名为“Homepage”的fxml文件和一个名为HomepageController的控制器。当我运行程序时,它会给我一个错误“java”。lang.ClassNotFoundException:HomepageController’。我使用的是MVC架构,我的FXML文件在一个名为“views”的包中,我的控制器在另一个名为“controllers”的包中。我一直在搜索类似的问题,但找不到解决方案。有人能帮忙吗?

FXML文件

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

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.paint.Color?>
<?import javafx.scene.text.Font?>

<VBox prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="HomepageController">
   <children>
      <SplitPane dividerPositions="0.2505567928730512, 0.7505567928730512" focusTraversable="true" prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS">
         <items>
            <AnchorPane>
               <children>
                  <Label alignment="CENTER" layoutX="14.0" layoutY="14.0" minWidth="60.0" prefWidth="-1.0" style="&#10;" text="Tournament" textAlignment="CENTER" wrapText="false">
                     <font>
                        <Font size="18.0" fx:id="x1" />
                     </font>
                     <textFill>
                        <Color blue="0.624" green="0.624" red="0.624" fx:id="x2" />
                     </textFill>
                  </Label>
                  <Button layoutX="58.0" layoutY="553.0" mnemonicParsing="false" onAction="#addTournament" text="Add Tournament" />
               </children>
            </AnchorPane>
            <ScrollPane prefHeight="-1.0" prefWidth="-1.0">
               <content>
                  <AnchorPane id="Content" minHeight="-1.0" minWidth="-1.0" prefHeight="592.0" prefWidth="430.0">
                     <children>
                        <Label alignment="CENTER" font="$x1" layoutX="14.0" layoutY="14.0" style="&#10;" text="Teams" textAlignment="CENTER" textFill="$x2" wrapText="false" />
                        <Button layoutX="180.0" layoutY="553.0" mnemonicParsing="false" onAction="#addTeam" text="Add Team" />
                     </children>
                  </AnchorPane>
               </content>
            </ScrollPane>
            <AnchorPane>
               <children>
                  <Label alignment="CENTER" font="$x1" layoutX="14.0" layoutY="14.0" style="&#10;" text="Players" textAlignment="CENTER" textFill="$x2" wrapText="false" />
                  <Button layoutX="74.0" layoutY="553.0" mnemonicParsing="false" onAction="#addPlayer" text="Add Player" />
               </children>
            </AnchorPane>
         </items>
      </SplitPane>
      <HBox id="HBox" alignment="CENTER_LEFT" spacing="5.0" VBox.vgrow="NEVER">
         <padding>
            <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
         </padding>
      </HBox>
   </children>
</VBox>

控制器

package controllers;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;

public class HomepageController {

    @FXML
    private Font x1;

    @FXML
    private Color x2;

    @FXML
    void addPlayer(ActionEvent event) {
        System.out.println("Add Player Button");
    }

    @FXML
    void addTeam(ActionEvent event) {
        System.out.println("Add Team Button");
    }

    @FXML
    void addTournament(ActionEvent event) {
        System.out.println("Add Tournament Button");
    }

}

这就是控制台上显示的内容

javafx.fxml.LoadException: 
/C:/Users/joao/eclipse-workspace/Virtual%20Tournament/bin/views/Homepage.fxml:14

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
    at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:103)
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:922)
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971)
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220)
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744)
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at application.Main.start(Main.java:14)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$166(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$179(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$177(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$178(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$152(WinApplication.java:177)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: HomepageController
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:920)
    ... 22 more

共有1个答案

沈良策
2023-03-14

使用FXML文件时,FXML文件需要知道控制器的文件和包名。

<代码>

 类似资料:
  • 我读了这个和这个,主要的想法是,有人有错误的结构和组件没有被扫描,我有一个正确的。 我的控制器正在正常初始化。我在Contructor上调试和设置断点进行了测试。它正在北京运行。尽管我的测试、邮递员和浏览器都无法到达endpoint。我得到的是404。我在用Gradle。我的代码是这样结构的。已经花了3个小时试图解决这个问题,但没有成功。 整个ApplicationContext.xml

  • 问题内容: 我正在使用simple_form gem并生成表单,我正在指定remote:true选项,如下所示: 因此,表单的输出html是以下片段: 正如我检查的那样,当使用 remote:true 选项时,使用标准的form_for帮助器将 data-remote =’true’添加 到表单中。从生成的html中可以看到,当我使用simple_form gem时,也有这样的属性。 __ 因此,

  • 问题内容: 我有一个配置功能: InnerView位于mainView内部。当我获得url like时,函数按预期工作。但是,当我获得带有id的url时,即,我看不到任何输出,但是我希望输出,这就是我遇到的问题。我认为绝对/相对视图存在问题,但是我已经尝试了所有组合,但仍然无法正常工作。 更新: 所以现在我有以下状态: 正如RadimKöhler所说。输出,但是从现在开始我该如何到达? 问题答案:

  • 我基本上遵循下一个教程:https://picocli.info/#_running_the_application 我正在尝试使用下一个命令运行我的应用程序: 我所在的目录中有2个JAR,分别是picocli和bashTool,但我收到了下一条错误消息: 这是y目录的外观: 有什么想法吗?

  • 我正在开发我的第一个基于spring的项目样本。下面是我的dispatcher-servlet.xml的摘录。 我尝试向以下url发布帖子,但它似乎从未到达相应的控制器类: 网址: post<code>{“testID”:“1”} 就是回应。 为什么我得到400错误,尽管一切似乎都在地方?

  • 对于Corda节点,控制器节点作为网络地图并提供验证公证服务。如果控制器节点关闭了怎么办?其他节点会独立运行吗?