寻求FXML / FXMLLoader错误诊断工具

概观

嗨,这是一个大纲用例。 我有一个在JavaFX Scene Builder中开发的看似有效的FXML文件。 它现在是一个非常重要的XML块,并且在FXML文件中的某处存在运行时加载错误。 使用“预览”选项,Scene Builder可以正常工作。 我有一个’ simple .fxml’文件,用于validation控制器是否按预期工作,即相同的控件和事件,但没有额外的FXML布局。 而且我已经和我正在进行剪切代码和测试循环以识别带有问题的XML。 所以我会在某个时候深究这一点。

目前在Scene Builder和Netbeans FXML编辑器中都没有显示错误,我没有像“ JavaFX – 加载FXML文件错误 ”(#1)那样出现加载错误 。 我得到的只是runnable中结束任务的一个例外,它说加载器引发了exception。

目标(S)

发生这些错误。 问题是FXML文件疑难解答可用或正在开发哪些工具?

一些想法,问题或选择:

  1. 这是一个错误吗? 要记住作为装载机的黑盒子应该发出某种指示,例如第246行的失败或“…表示在哪里看的东西。
  2. 您有哪些技巧,技巧或建议可以更快地找到/解决此类错误?
    • 有没有地方可以使用Include
  3. FXMLLoader类有什么钩子可以在错误发生之前捕获或捕获错误?
  4. 是否有任何记录或诊断FXMLLoader处理的工具?
  5. 有没有人写过可以这种方式使用的自定义FXMLLoader? (见#3)。
    • 我看到FXML使用SAX,是否可以包装或挂钩解析器并为FXMLLoader提供备用解析器?
  6. 是否有用于分析FXML和Java应用程序的静态工具 – 如FXML Lint或其他东西?
  7. 什么深刻的FXML加载,解析,运行时信息可用于处理FXML。
  8. 是否存在或可能会在控制器中添加或注入一些额外的入口点以捕获FXML负载问题?
    • 例如,可以级联控制器,以便我可以创建一个“根控制器”,它可以捕获更接近原点的问题。

目前,只有在编辑人员看不到任何内容时才会在加载时发现的FXML中的问题只是耗时且不可预测。 如果有人,我想看一些诊断工具

进一步的见解

这些是开发过程中出现的一些相关的“ 调试 ”和“ 故障排除 ”技巧。 也许其中一些可能会在某一天进入FXMLvalidation器或Lint工具(?)这些点没有特定的顺序,它们的编号用于交叉引用。

  1. FXML中的任何控制器标识符都必须存在并使用@FXML在Java代码中进行注释。 如果缺少注释,FXML将无法加载。
  2. 每个使用@FXML注释的Java名称都应该在FXML标记文件中。 说一个名为“myLabel”的标签:如果代码中使用的myLabel会出现NullPointerException。 与案例#1不同,该文件将加载。
  3. 不要在JavaFX中使用NetBeans“Compile on Save”编译选项。 它似乎在看似正确的代码上产生虚假的NullPointerException-s。
  4. 如果您重命名/重构主应用程序,请确保更新构建目标(例如maven或ant)。 某些IDE重构代码可能会错过该链接。
  5. FXMLLoader()确实给你一个线索。 如果你捕获exception,你可以看看“getMessage()”……

    catch( Exception ex ){ System.out.println("Exception on FXMLLoader.load()"); System.out.println( ex.getMessage() ); //-- Doesn't show in stack dump } 
  6. 检查您在FXML资源上的输入。 小错字是识别和检测的魔鬼。 这适用于未由编译器或lint检查的任何字符串,而不仅仅是FXML。

     // These two line are not the same: Parent root; root = FXMLLoader.load(getClass().getResource("Samplle.fxml")); root = FXMLLoader.load(getClass().getResource("Sample.fxml")); 
  7. exception.getMessage()是:“ 需要位置 ”,对于#6中的拼写错误。

  8. 如果您手动编辑FXML,请确保您 所有相关组件。
  9. 请记住将FXML名称空间包含在“-d”文件中,例如在最外层的XML元素上需要。

      

希望有所帮助。 这些是基于小型测试和试验的猜测。 请修复关于事情如何实际工作的误解的嵌入式假设。

另见

  1. JavaFX – 加载FXML文件错误
  2. 用于应用程序的Android诊断工具 (用例)
  3. 我想覆盖FXMLLoader。 我怎样才能做到这一点?
  4. FXMLLoader如何加载FXML的控制器?
  5. 无法找到JavaFX的fxml错误 (用例)
  6. 类javafx.fxml.FXMLLoader
  7. JavaFX架构 (PDF可用),遗憾的是这里没有关于FXML的内容。
  8. FXML简介
  9. FXMLLoader.java源代码

我使用SceneBuilder 2.0和JavaFX2时遇到了同样的问题。 问题是SceneBuilder生成JavaFX8代码。 代码有效但不兼容100%JavaFX2。 也许这可能是你的问题。 你应该从FXMLLoader得到一个exception,错误在哪一行。

优美的风景

Scenic View是一个JavaFX应用程序,旨在使您可以轻松理解应用程序场景图的当前状态,并且还可以轻松地操作场景图的属性,而无需继续编辑代码。 这可以让你找到错误,并使像素完美无需编译 – 检查 – 编译舞蹈。

在此演示文稿中有一个很好的推荐和风景视图描述:

  • 自己动手:自定义JavaFX控件

更新 Scenic View的工作方式类似于JavaFX应用程序的调试器或监视器。 它不会对FXML加载器问题有所帮助,因为它调查或监视运行的场景。 另外,我发现最新版本v1.3.0在Windows 7和64位Java 8上不稳定。

Interesting Posts