- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我为我的javafx项目编译我的 Controller 和主类,它们都会编译没有任何错误,如果我运行主类,Javafx(我在场景构建器中构建的GUI)将像预期的那样弹出如果 Controller 未连接到 javafx。一旦我尝试通过场景生成器将 Controller 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>
我尝试找到解决方案,并且使用完全空白的 Controller 类和所有内容进行了尝试,但它仍然不起作用。有人知道有什么解决办法吗?
最佳答案
哦,这有点邪恶。
当加载 FXML 文件时,如您所知,它会在 Controller 中注入(inject)带有 @FXML
注释的字段以及具有相应 fx:id
属性(属性FXML 文件中的值与 Controller 中的字段名称相匹配)。
鲜为人知(且未记录)的是,可以注入(inject)少量(好吧,两个)附加值。例如,您可以这样做
@FXML
private ResourceBundle resources ;
获取对提供给FXMLLoader
的资源包的引用。同样,您可以使用(您猜对了)获取对提供给 FXMLLoader
的 URL 的引用:
@FXML
private URL location ;
这些会自动发生。
因此,从堆栈跟踪来看,您在 FXML 文件和 Controller 中定义了一个 ComboBox
,您将其称为 location
:
@FXML
private ComboBox<String> location ;
当 FXML 加载器看到这一点时,可能在它尝试解析 FXML 文件之前,它会尝试将提供给加载器的 URL 注入(inject)到该字段中,当然会失败,因为它试图分配一个 URL
到 ComboBox
。
要修复此问题,只需更改组合框的名称即可:
@FXML
private ComboBox<String> locationCombo ;
FXML 文件中的 fx:id
属性也类似。
关于java - 尝试将 Controller 类连接到 javafx 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34165195/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!