Oracle的javaFX教程中FXMLLoader的问题

Oracle的javaFX教程中FXMLLoader的问题,javafx,fxml,Javafx,Fxml,不久前,我从Oracle网站开始学习javafx教程。在学习本教程的过程中,我遇到了一个问题。下面是一个代码: 1) fxml_example.fxml <?xml version="1.0" encoding="UTF-8"?> <?import java.net.*?> <?import javafx.geometry.*?> <?import javafx.scene.control.*?> <?import javafx.scene

不久前,我从Oracle网站开始学习javafx教程。在学习本教程的过程中,我遇到了一个问题。下面是一个代码:

1) fxml_example.fxml

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

<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<GridPane fx:controller="fxmlexample.FXMLExampleController"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<fx:script>
    function handleSubmitButtonAction(){
    actiontarget.setText("Calling the JavaScript");
    }
</fx:script>
<padding>
    <Insets top="25" right="25" bottom="10" left="25" />
</padding>

<Text text="Welcome" GridPane.columnIndex="0"
    GridPane.columnSpan="2" GridPane.rowIndex="0" />

<Label text="User Name:" GridPane.columnIndex="0"
    GridPane.rowIndex="1" />

<TextField GridPane.columnIndex="1" GridPane.rowIndex="1" />

<Label text="Password:" GridPane.columnIndex="0"
    GridPane.rowIndex="2" />

<PasswordField fx:id="passwordField"
    GridPane.columnIndex="1" GridPane.rowIndex="2" />

<HBox alignment="bottom_right" spacing="10"
    GridPane.columnIndex="1" GridPane.rowIndex="4">

    <Button text="Button" onAction="#handleSubmitButtonAction" />

</HBox>

<Text fx:id="actiontarget" GridPane.columnIndex="0"
    GridPane.columnSpan="2" GridPane.halignment="RIGHT"
    GridPane.rowIndex="6" />
</GridPane>
3) FXMLExampleController.java

package application;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.text.Text;

public class FXMLExampleController {
    @FXML private Text actiontarget;

    @FXML protected void handleSubmitButtonAction(ActionEvent event) {
        actiontarget.setText("Sign in button pressed");
    }
}
以下是例外情况列表:

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at         com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at     com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
at java.lang.Thread.run(Unknown Source)
Caused by: javafx.fxml.LoadException: 
/C:/Users/.../eclipse-workspace/FXMLExample/bin/application    /fxml_example.fxml:10

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.FXMLExample.start(FXMLExample.java:12)
at     com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(Launcher    Impl.java:863)
at     com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.jav    a:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(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$147(WinApplication.java:177)
... 1 more
Caused by: java.lang.ClassNotFoundException:     fxmlexample.FXMLExampleController
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
Exception running application application.FXMLExample

那么,FXMLLoader有什么问题吗?但是什么呢?如何修复它?

您的FXML将
fx:controller
设置为
fxmlexample.FXMLExampleController
,但您的包名是
application
,因此
fx:controller
值应该是
application.FXMLExampleController
(或者您可以将包名更改为
fxmlexample
以匹配示例代码)。

您的FXML将
fx:controller
设置为
fxmlexample.FXMLExampleController
,但包名是
application
,因此
fx:controller
值应该是
application.fxmlexamplexamplecontroller
(或者您可以将包名更改为
fxmlexample
,以匹配示例代码).

啊,是的。我将包重命名为fxmlexample。我现在将更新我的帖子,因为这并不能解决问题。现在我看到我将两个解决方案混合在一个解决方案中。我应该使用JavaScript函数或FXMLExampleController.java,而不是两者。如果我不使用包,我如何解决相同的问题?我可以在这里写什么fx:controller=?啊,对。我可以已将包重命名为fxmlexample。我现在将更新我的帖子,因为这并不能解决问题。现在我看到我将两个解决方案混合在一个解决方案中。我应该使用JavaScript函数或FXMLExampleController.java,而不是两者。如果我不使用包,我如何解决同一问题?我可以在这里写什么fx:controller=??既然你接受了我的答案,我就可以假设你的代码正在运行。不要更改问题并修复错误。(这将使已接受的答案无效,并使你的问题变成无法再现错误的问题。这将使该问题成为结束的候选问题(可能是一些否决票的合理目标)。)出于这个原因,我回滚了您的编辑。由于您接受了答案,我假设您的代码正在运行。不要更改问题并修复错误。(这将使接受的答案无效,并将您的问题变成无法复制错误的问题。这将使该问题成为关闭的候选问题。)(可能是一些反对票的合理目标。)出于这个原因,我回滚了您的编辑。
Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at         com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at     com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
at java.lang.Thread.run(Unknown Source)
Caused by: javafx.fxml.LoadException: 
/C:/Users/.../eclipse-workspace/FXMLExample/bin/application    /fxml_example.fxml:10

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.FXMLExample.start(FXMLExample.java:12)
at     com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(Launcher    Impl.java:863)
at     com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.jav    a:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(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$147(WinApplication.java:177)
... 1 more
Caused by: java.lang.ClassNotFoundException:     fxmlexample.FXMLExampleController
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
Exception running application application.FXMLExample