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

为什么我的JavaFX控制器没有加载?

阮昊阳
2023-03-14
Application.launch(StarFXDemo.class, "");
package standalonedemo;

import java.io.IOException;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class StarFXDemo extends Application
{

    @Override
    public void start(Stage stage) throws Exception
    {
        Parent root = null;
        try
        {
            root = FXMLLoader.load(getClass().getResource("StarFXDemoDoc.fxml"));
        } catch (IOException ioe)
        {
            ioe.printStackTrace(System.out);
        }

        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
}
getClass().getResource("/standalonedemo/resources/StarFXDemoDoc.fxml")

返回文件的URL。

starfxdemodoc.fxml为:

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

<?import standalonedemo.*?>
<?import javafx.geometry.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<TitledPane animated="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" text="FX Sim Demo" 
            xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" 
           fx:controller="standalonedemo.StarFXDemoDocController">
  <content>
    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
         <children>
            <VBox prefHeight="85.0" prefWidth="322.0" spacing="5.0" style="-fx-background-color: coral;">
               <children>
                  <Label text="Sim Title" />
                  <TextField fx:id="SimNameField" onMouseDragExited="#setSimulationName" />
               </children>
               <padding>
                  <Insets left="25.0" top="15.0" />
               </padding>
            </VBox>
            <Button fx:id="BuildSphereButton" layoutX="14.0" layoutY="100.0" mnemonicParsing="false" onAction="#buildSphereAction" text="Build Sphere" />
         </children></AnchorPane>
  </content>
</TitledPane>

而StarfXDemodocController.java是这样的:

package standalonedemo;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;

public class StarFXDemoDocController implements Initializable
{
    @FXML
    private TextField SimNameField;
    @FXML
    private Button BuildSphereButton;

    /**
     * RequiredConstructor
     */
    public StarFXDemoDocController() {}

    @Override
    public void initialize(URL url, ResourceBundle rb)
    {

    } 

    @FXML
    private void buildSphereAction(ActionEvent event)
    {

    }

    @FXML
    private void setSimulationName()
    {

    }
}
FXMLLoader.load(getClass().getResource("/standalonedemo/resources/StarFXDemoDoc.fxml"));

有谁能帮我一下吗?

编辑/更新:

根据james_d的评论(谢谢你James,显然我已经盯着这个问题太久了……),我修复了控制器中的明显错误,并将SimNameField设置为TextField,而不是Label(并更新了上面的代码块以反映这一点)。我还将异常处理更改为使用PrintStackTrace。这些更改现在为我提供了以下堆栈跟踪:

javafx.fxml.LoadException: file:<properPathTo>/StandAloneDemo/dist/StandAloneDemo.jar!/standalonedemo/resources/StarFXDemoDoc.fxml:11
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 standalonedemo.StarFXDemo.start(StarFXDemo.java:35)                                    
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)        
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)              
at java.security.AccessController.doPrivileged(Native Method)                                  
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)          
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)            
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)                                 
at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139)                 
at java.lang.Thread.run(Thread.java:745)                                                       
Caused by: java.lang.ClassNotFoundException: standalonedemo.StarFXDemoDocController starting from SystemClassLoader[55 modules] with possible defining loaders null and declared parents [org.netbeans.MainImpl$BootClassLoader@97e1986, ModuleCL@1fa50985[org.netbeans.api.annotations.common], ModuleCL@7251b0ac[org.openide.awt], ModuleCL@7d1344a8[org.netbeans.api.progress], ModuleCL@26b9eb92[org.netbeans.swing.plaf], ModuleCL@7feb85da[org.openide.dialogs], ModuleCL@15c98cea[org.openide.nodes], ModuleCL@ed11c24[org.openide.windows], ModuleCL@621f6603[org.netbeans.swing.tabcontrol], ModuleCL@2a3ed4eb[org.netbeans.swing.outline], ...40 more]                                                  
at org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:224)                                                                                                                                                         
at org.netbeans.ModuleManager$SystemClassLoader.loadClass(ModuleManager.java:722)                                                                                                                                             
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)                                                                                                                                                                      
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:920)                                                                                                                                                  
... 22 more                                                                                                                                                                                                                   
Caused by: java.lang.ClassNotFoundException: standalonedemo.StarFXDemoDocController                                                                                                                                                   
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)                                                                                                                                                                 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)                                                                                                                                                                      
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)                                                                                                                                                              
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)                                                                                                                                                                      
at org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:222)                                                                                                                                                         
... 25 more                                                 

取出了第一个堆栈跟踪,因为它不再相关,并更新了几行代码(比如将包的导入添加到FXML中)。

一直在玩它。如果我移除控制器引用,GUI将按预期启动(因此我们知道FXML文件正在加载)。如果我实例化了一个Controller对象(在调用FXMLLoader.load(<...>))之前),它会按照预期进行实例化,并且我可以通过NetBeans调试器验证它不是null,这样我就知道Controller类是编译的,并且在类路径上。

那么为什么FXMLLoader找不到呢?我应该使用另一种方法来加载它吗?我曾想过在代码中创建controller对象并这样设置它,但当涉及到fx:controller语句时,这似乎会让NetBeans感到恼火(也就是说,如果您在FXML中有需要控制器的元素,而该语句不在其中,则NetBeans将其标记为不正确)。

共有1个答案

洪飞白
2023-03-14
<TextField fx:id="SimNameField" onMouseDragExited="#setSimulationName" />
@FXML
private Label SimNameField ;
 类似资料:
  • 我已经建立了一个asp.netmvc网页。我的所有操作,如:创建、编辑等...有自己的视图,除了删除,因为我正试图在Bootstrap的帮助下弹出一个模态。我通过jQuery/JavaScript向modal传递一个id,并将asp-action作为表单的属性,理论上它应该可以工作,但事实并非如此。 索引视图: 删除控制器中的操作: Javascript: 输入获取id作为名称的值: 调试时,它不

  • 我有一个通过Interface Builder定义的布局约束视图。由于它们无法暂时停用,我决定通过拨打以下电话有选择地删除它们: 但是,之后约束仍然驻留在视图中。约束。此外,我还希望以编程方式添加约束(同样,因为我无法(取消)激活它们): 对我的方法的任何调用都会导致变量wasAdded的值NO。这也反映在用户界面上,它根本没有改变。 最后,我既不能以编程方式添加约束,也不能删除添加到情节提要的约

  • 问题内容: 我一直在跟随一个教程,教科书向我保证这可以工作,但是 错误:[ng:areq]参数’SimpleController’不是一个函数,未定义 为什么?我掉毛了,在它上面上下移动,看不到问题。为什么出现未定义状态? 问题答案: 我的猜测是您使用的angular.js版本是更新的。 有一个重大变化,即: 默认情况下 , angular将不再寻找控制器。有关更多详细信息,请参见3f2232b5

  • 我想了解一些关于Spring的东西。我正在尝试配置它,但是有些东西我不明白,因为Spring似乎不认识我的控制器。 这是我的web.xml 这就是servlet 控制器:

  • 问题内容: 为什么JavaFX中没有ObservableQueue?如果我们查看FXCollection的Java 9文档(只是看一下8的变化),我们会看到用于创建Observable集,列表和映射的静态助手方法。还有一些创建Observable float和integer数组的方法。但是,无法创建ObservableQueue。Java中的Queue接口具有许多有趣的实现,包括ArrayDequ

  • 我在试着用Kotlin的micronaut。我有这个: 我写了以下控制器测试: 但是测试失败,出现。 我已经对此进行了调试,在测试期间,从我所知的情况来看,在中没有找到限定符的bean。当我使用类启动应用程序时,我可以看到它找到并使路由可用。 这几乎是微型机器人的Hello世界,我不确定这里出了什么问题。