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

JavaFX 8加载外部FXML

符懿轩
2023-03-14

当查看JavaFX SceneBuilder时,它能够加载任何类型的FXML。则忽略根节点或控制器。scenebuilder能够加载任何类型的fxml并显示其组件。

有没有人想要一种方法来加载一个fxml,而不考虑其字段的ID、控制器或根节点的类型?

问题是,当我尝试加载任何fxml时,它只能加载,如果我设置了正确的根类型。我想(通过FileChooser)将我能找到的任何FXML加载到(比方说)一个窗格中。

任何想法都将受到欢迎(www中的所有帮助都指向使用特定根类型的加载机制,因此根类型是已知的)。我想加载未知的根类型,不考虑fx:id等。

例外情况:

Exception in Application start method
Exception in thread "main" 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$152(LauncherImpl.java:182)
    at com.sun.javafx.application.LauncherImpl$$Lambda$2/1531448569.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: javafx.fxml.LoadException: 
/C:/Users/Dominik/Documents/fhnw/bath/svn/examples/fxmlloader/out/production/FxHeatMap/eu/hansolo/fx/heatmap/fxmlload/Application.fxml:20

    at eu.hansolo.fx.heatmap.fxmlload.FXMLLoader.start(FXMLLoader.java:34)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherImpl.java:863)
    at com.sun.javafx.application.LauncherImpl$$Lambda$66/84373524.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl$$Lambda$47/1537074899.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295)
    at com.sun.javafx.application.PlatformImpl$$Lambda$50/1947223685.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294)
    at com.sun.javafx.application.PlatformImpl$$Lambda$48/835743810.run(Unknown Source)
    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$145(WinApplication.java:101)
    at com.sun.glass.ui.win.WinApplication$$Lambda$38/1962582134.run(Unknown Source)
    ... 1 more
Caused by: javafx.fxml.LoadException: 
/C:/Users/Dominik/Documents/fhnw/bath/svn/examples/fxmlloader/out/production/FxHeatMap/eu/hansolo/fx/heatmap/fxmlload/Application.fxml:20

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2605)
    at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:104)
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:918)
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:967)
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:216)
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:740)
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2711)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2531)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2445)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3218)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3128)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3108)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3101)
    at eu.hansolo.fx.heatmap.fxmlload.FXMLLoader.start(FXMLLoader.java:32)
    ... 14 more
Caused by: java.lang.ClassNotFoundException: sample.MainController
    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 javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:916)
    ... 27 more

Process finished with exit code 1

共有1个答案

司徒经纶
2023-03-14

fx:controllerfx:root属性。别糊涂了。您可以通过将加载的对象强制转换为超类来忽略根布局类型。但我认为没有办法无视fxml文件中定义的fx:controller。在这种情况下,您需要自己加载文件,并从文件中删除fx:controller及其值。

 类似资料:
  • 我正在尝试使用Maven编写一个JavaFx8应用程序。我编写了一个简单的应用程序主类和一个fxml文件(一个不执行任何操作的根fxml文件)。 当我尝试加载fxml根文件时,出现错误“Location is not set”: 我不是JavaFx8的新手,我已经遇到过这种错误,但这次我没有发现问题。 我的类是:app.java rootLayout.fxml: 我检查了打印出getClass输出

  • 我有一个带有spring boot的java项目,我需要加载应用程序。外部文件夹中的属性和依赖项jar。 我使用该应用程序进行了测试。类路径和加载程序中的属性。路径属性工作正常。 当我使用外部属性文件(我确信它们已被使用)时,加载程序。路径工作不正常,结果为ClassNotFound,因为JAR未加载。 此外,当我启动应用程序与**-Dloader.path=**xxx它的工作正常。 如何使用外部

  • 问题内容: 我正在尝试使用Angular和Phonegap加载位于远程服务器上但遇到问题的视频。在我的JSON中,URL作为纯HTTP URL输入。 我的影片范本 我所有其他数据都已加载,但是当我查看控制台时,出现以下错误: 我尝试添加配置设置,但没有解决我的问题。 问题答案: 这是唯一对我有用的解决方案: 然后在iframe中:

  • 我正在尝试集成联邦快递API并得到这个错误。 警告:SoapClient::SoapClient()[SoapClient.SoapClient]:I/O警告:无法加载测试中的外部实体“./wsdl/RateService_v13.wsdl”。php在线12 致命错误:未捕获SoapFault异常:[WSDL]SOAP-ERROR:解析WSDL:无法从'.../wsdl/RateService_v

  • 问题内容: 在使用库在JavaScript中绘制图表时,我还是一个新手。我刚刚开始尝试使用Chartjs,但一直无法使用getJson或其他任何方式加载我的json对象并替换标签和数据。我以前使用过HighCharts,相比之下,它非常简单。另外,我将如何将其放入Angular的指令中并显示出来。 https://jsfiddle.net/0u9Lpttx​​/1/ index.html data

  • 为了完整起见,下面是toolbarview.fxml: