【发布时间】:2014-07-23 09:23:16
【问题描述】:
概述
您好,这是一个大纲用例。我在 JavaFX Scene Builder 中开发了一个看似有效的 FXML 文件。它现在是一个重要的 XML 块,并且在 FXML 文件中的某处存在运行时加载错误。 Scene Builder 与“预览”选项配合得很好。我有一个“simple.fxml”文件,用于验证控制器是否按预期工作,它是相同的控件和事件,但没有额外的 FXML 布局。我有并且我正在执行剪切代码和测试循环来识别存在问题的 XML。所以我会在某个时候深入了解这一点。
目前,Scene Builder 和 Netbeans FXML 编辑器中都没有显示错误,并且我没有收到“JavaFX - loading FXML file error”(#1) 中的加载错误。我得到的只是 runnable 中结束任务的异常,它表示加载程序抛出了异常。
目标
会发生这些错误。问题是有哪些工具可用或正在开发中FXML 文件疑难解答?
一些想法、问题或选择:
- 这是一个错误吗?记住像加载程序这样的黑匣子应该发出某种指示符,例如第 246 行的失败或“...指示查找位置的东西。
- 您有哪些技巧、技巧或建议可以更快地找到/解决此类错误?
- 有使用Include的地方吗
- FXMLLoader 类上有哪些钩子可以在错误全部崩溃之前捕获或捕获错误?
- 是否有任何工具可以记录或诊断 FXMLLoader 处理?
- 有没有人编写过可以这样使用的自定义 FXMLLoader? (见#3)。
- 我看到 FXML 使用 SAX,是否可以包装或挂钩解析器并为 FXMLLoader 提供备用解析器?
- 是否有任何用于分析 FXML 和 Java 应用程序的静态工具——比如 FXML Lint 之类的?
- 关于 FXML 的处理方式有哪些深入的 FXML 加载、解析、运行时信息可用。
- 是否有或是否可以添加或注入一些额外的入口点到控制器中以捕获 FXML 负载问题?
- 例如,控制器是否可以级联,这样我就可以创建一个“根控制器”,它可能会在更接近原点的位置捕获问题。
目前,仅在加载时才发现的 FXML 内部的问题,如果编辑者什么都看不到,则只是耗时且不可预测。如果有人问,我想看看一些诊断工具
进一步的见解
这些是开发过程中出现的一些相关的“调试”和“疑难解答”技巧。也许其中一些可能有一天会进入 FXML Validator 或 Lint 工具(?)这些点没有特定的顺序,它们被编号用于交叉参考。
- FXML 中的任何控制器标识符必须存在,并在 Java 代码中使用 @FXML 进行注释。如果缺少注释,则不会加载 FXML。
- 每个带有 @FXML 注释的 Java 名称都应该在 FXML 标记文件中。说一个名为“myLabel”的标签:如果代码中使用了 myLabel,则会出现 NullPointerException。与案例 #1 不同,该文件将加载。
- 不要将 NetBeans 的“保存时编译”编译选项与 JavaFX 一起使用。它似乎在看似正确的代码上生成了虚假的 NullPointerException-s。
- 如果重命名/重构主应用程序,请确保更新构建目标(例如 maven 或 ant)。某些 IDE 重构代码可能会错过该链接。
-
FXMLLoader() 确实给了你一个线索。如果您发现异常,您可以查看“getMessage()”...
catch( Exception ex ){ System.out.println("Exception on FXMLLoader.load()"); System.out.println( ex.getMessage() ); //-- Doesn't show in stack dump } -
检查您在 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")); exception.getMessage() 是:“Location required”,对于 #6 中的那个错字。
- 如果您手动编辑 FXML,请确保您所有相关组件。
-
记得在“-d”文件中包含 FXML 命名空间,例如需要在最外层的 XML 元素上。
<TreeView id="treeView" fx:id="tree" xmlns:fx="http://javafx.com/fxml" ... >
希望有所帮助。这些是基于小型测试和试验的猜测。请修正对实际工作原理的误解的嵌入假设。
另见:
- JavaFX - loading FXML file error
- Android diagnostic tool for applications(用例)
- I would like to override FXMLLoader. How can I do that?
- How does FXMLLoader load the FXML's controller?
- Cannot locate the fxml error for JavaFX(用例)
- Class javafx.fxml.FXMLLoader
- JavaFX Architecture(提供 PDF),很遗憾,这里没有关于 FXML 的内容。
- Introduction to FXML
- FXMLLoader.java source code
【问题讨论】:
标签: java javafx javafx-2 fxml diagnostics