Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/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
尝试将控制器类连接到javafx时出错_Java_User Interface_Javafx - Fatal编程技术网

尝试将控制器类连接到javafx时出错

尝试将控制器类连接到javafx时出错,java,user-interface,javafx,Java,User Interface,Javafx,如果我为我的javafx项目编译控制器和主类,它们都编译时没有任何错误,如果我运行主类,javafx(我在场景生成器中构建的GUI)将像控制器未连接到javafx时那样弹出。只要我尝试通过scene builder将控制器java文件连接到javafx,然后尝试运行该项目,GUI将不会弹出,它将给出以下错误列表: C:\Users\Kenny's\Desktop\Project3>java Project3 Exception in Application start me

如果我为我的javafx项目编译控制器和主类,它们都编译时没有任何错误,如果我运行主类,javafx(我在场景生成器中构建的GUI)将像控制器未连接到javafx时那样弹出。只要我尝试通过scene builder将控制器java文件连接到javafx,然后尝试运行该项目,GUI将不会弹出,它将给出以下错误列表:

    C:\Users\Kenny's\Desktop\Project3>java Project3
    Exception in Application start method
    java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    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(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
    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$155(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: javafx.fxml.LoadException:
     /C:/Users/Kenny's/Desktop/Project3/Project3.fxml

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
    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 Project3.start(Project3.java:12)
    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.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    ... 1 more
    Caused by: java.lang.IllegalArgumentException: Can not set javafx.scene.control.ComboBox field Project3Controller.location to java.net.URL
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
    at java.lang.reflect.Field.set(Field.java:764)
    at javafx.fxml.FXMLLoader.injectFields(FXMLLoader.java:1163)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2554)
    ... 17 more
    Exception running application Project3

    C:\Users\Kenny's\Desktop\Project3>
我试图找到一个解决方案,我尝试了一个完全空白的控制器类和所有东西,但它仍然不起作用。
有人知道什么解决办法吗?

哦,这有点邪恶

加载FXML文件时,如您所知,它会在控制器中注入带有
@FXML
注释的字段,这些字段包含具有相应
fx:id
属性(FXML文件中的属性值与控制器中的字段名相匹配)的元素

鲜为人知(且未记录)的是,可以注入少量(两个)附加值。例如,你可以

@FXML
private ResourceBundle resources ;
获取对提供给
fxmloader
的资源包的引用。类似地,您可以使用(您猜到了)获得对提供给
fxmloader
的URL的引用:

这些都是自动发生的

因此,从堆栈跟踪中可以看出,在FXML文件和控制器中定义了一个名为
location
组合框:

@FXML
private ComboBox<String> location ;

同样地,对于FXML文件中的
fx:id
属性也是如此。

非常感谢!我刚刚进去,改变了所有的组合框的fx:id,并更新了控制器,现在它可以工作了!请将这个问题标记为正确:如果其他人遇到同样的问题,它将帮助他们找到它(而且,正如我所指出的,除非您有相当多的JavaFX经验,否则很难弄清楚)。
@FXML
private ComboBox<String> location ;
@FXML
private ComboBox<String> locationCombo ;