JavaFX 2.2 Controller 在 JAR 文件中加载时未调用initialize()

标签 java javafx-2 javafx

背景:我创建了一个 JavaFX 应用程序,使用 JFXPanel 嵌入到 Swing 框架中。我一直使用 Eclipse 作为 IDE。 “主应用程序”是另一个类,它仅用于创建扩展 JFXPanel 的类的实例,以在实例化时加载我的 .fxml 文件。当从 Eclipse 执行主类时,一切都很好,我的 .fxml 文件中指定的 fx:controller 调用了它的 initialize() 方法(我可以从它在加载时对 UI 所做的更改看出)并且没有任何问题。

但是,当我将所有内容打包到 JAR 中并尝试将 JFXPanel 扩展类添加到 Swing JFrame 实例时,它会设法加载 .fxml 文件,仅读取图像、样式表等,其余代码按预期运行,但从未调用 fx:controllerinitialize() 方法。我从 jar 内部或外部的其他类访问该类没有问题,我什至尝试设置一个将返回 Controller 实例的 ControllerFactory,并尝试设置 FXMLLoader 的类加载器以及使用调用 load() 的静态和非静态方法的各种组合。结果总是一样的:从 IDE 启动时可以工作,但从打包的 jar 启动时则不行。我知道 jar 没有丢失任何文件,因为就像我说的那样,从 Java 代码中查找类没有问题,并且捆绑的 fxml/css 文件似乎加载得很好,减去了 Controller 问题。

有人曾经遇到过这种情况,或者知道 FXMLLoader 无法设置 Controller 会发生什么情况吗?这可能是某种错误吗?

最佳答案

在将 JavaFX 软件打包到 .jar 文件中时,我遇到了类似的问题。原来是相对路径的问题。您的 IDE 对此没有任何问题,但是当在 jar 中编译时,它就会出现问题。

使用以下代码调用我的 .fxml 文件解决了这个问题。

getClass().getClassloader().getResource("/my/view/selector.fxml")

要说这是您的错误的“原因”,我不确定,但这确实困扰了我一段时间,并且似乎几乎就是我遇到的问题。

原问题:Executable Jar limited to one window with JavaFX

关于JavaFX 2.2 Controller 在 JAR 文件中加载时未调用initialize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14900047/

相关文章:

java - dockerfile 应该包含什么来运行一个简单的 CRUD Web 应用程序?

java - 用java构建wsdl的框架或工具

java - spring中的 self 注入(inject)并使用mockito进行测试

JavaFX 一对多(1 :n) In TableView

java - 关闭 JavaFX 选项卡不会释放内存

java - YUI Compressor 在 Tomcat 中从 WAR 运行时抛出 StringIndexOutOfBoundsException

utf-8 - 如何取消屏蔽 JavaFX PasswordField 或正确屏蔽 TextField?

java - RotateTransition 当前角度 javafx2

java - 如何向自定义 JavaFX 控件添加子组件和新属性?

Javafx 2D 迷宫标准解决方案不起作用