使用 Gluon Charm 切换视图
Switching Views with Gluon Charm
我正在尝试构建具有多个视图的应用程序。我已成功添加两个视图,但当我尝试切换到第三个视图时出现错误:
Exception in thread "JavaFX Application Thread" java.lang.IllegalStateException: Location is not set.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2434)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at com.airhacks.afterburner.views.FXMLView.loadSynchronously(FXMLView.java:91)
at com.airhacks.afterburner.views.FXMLView.initializeFXMLLoader(FXMLView.java:100)
at com.airhacks.afterburner.views.FXMLView.getPresenter(FXMLView.java:179)
at com.testapp.gpa.TestApp.lambda$init(TestApp.java:46)
at com.testapp.gpa.TestApp.access$lambda(TestApp.java)
at com.testapp.gpa.TestApp$$Lambda.get(Unknown Source)
at com.gluonhq.impl.charm.a.d.a.a(SourceFile:32)
at com.gluonhq.charm.glisten.application.MobileApplication.switchView(SourceFile:344)
at com.gluonhq.charm.glisten.application.MobileApplication.switchView(SourceFile:312)
项目结构
我可以从主视图切换到学期视图。但我无法切换到 CourseView。这些视图只是空 class 扩展 FXMLView class 的视图。我遵循 Comments sampe 应用程序的项目结构。
这是 course.fxml 文件的第一行
<View maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.testapp.views.courses.CoursePresenter">
指向控制器class。
如果您遵循了 Comments 示例,这里有一个详细的 post,解释了 Gluon 插件如何生成项目,以及您必须在何处添加代码和资源。
它还解释了如何使用 Afterburner 框架。
由于它基于约定优于配置,对于像 home
这样的视图,您必须定义:
在src/main/java目录中:
com.gluonhq.demo.comments.views.home
包和两个 类:HomeView
和 HomePresenter
。
在src/main/resources目录中:
com.gluonhq.demo.comments.views.home
包和两个文件:home.fxml
和 home.css
.
在您的项目中,您有:home
、semester
和 course
。请注意,您已经定义了 CourseView
和 CoursePresenter
,因此这就是框架因 Location is not set
异常而失败的原因:它期望 course.fxml
,但您添加了 courses.fxml
反而。因此,要么将 类 重命名为 CoursesView
和 CoursesPresenter
,要么将 fxml 文件重命名为 course.fxml
.
我正在尝试构建具有多个视图的应用程序。我已成功添加两个视图,但当我尝试切换到第三个视图时出现错误:
Exception in thread "JavaFX Application Thread" java.lang.IllegalStateException: Location is not set.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2434)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at com.airhacks.afterburner.views.FXMLView.loadSynchronously(FXMLView.java:91)
at com.airhacks.afterburner.views.FXMLView.initializeFXMLLoader(FXMLView.java:100)
at com.airhacks.afterburner.views.FXMLView.getPresenter(FXMLView.java:179)
at com.testapp.gpa.TestApp.lambda$init(TestApp.java:46)
at com.testapp.gpa.TestApp.access$lambda(TestApp.java)
at com.testapp.gpa.TestApp$$Lambda.get(Unknown Source)
at com.gluonhq.impl.charm.a.d.a.a(SourceFile:32)
at com.gluonhq.charm.glisten.application.MobileApplication.switchView(SourceFile:344)
at com.gluonhq.charm.glisten.application.MobileApplication.switchView(SourceFile:312)
项目结构
我可以从主视图切换到学期视图。但我无法切换到 CourseView。这些视图只是空 class 扩展 FXMLView class 的视图。我遵循 Comments sampe 应用程序的项目结构。 这是 course.fxml 文件的第一行
<View maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.testapp.views.courses.CoursePresenter">
指向控制器class。
如果您遵循了 Comments 示例,这里有一个详细的 post,解释了 Gluon 插件如何生成项目,以及您必须在何处添加代码和资源。
它还解释了如何使用 Afterburner 框架。
由于它基于约定优于配置,对于像 home
这样的视图,您必须定义:
在src/main/java目录中:
com.gluonhq.demo.comments.views.home
包和两个 类:HomeView
和HomePresenter
。在src/main/resources目录中:
com.gluonhq.demo.comments.views.home
包和两个文件:home.fxml
和home.css
.
在您的项目中,您有:home
、semester
和 course
。请注意,您已经定义了 CourseView
和 CoursePresenter
,因此这就是框架因 Location is not set
异常而失败的原因:它期望 course.fxml
,但您添加了 courses.fxml
反而。因此,要么将 类 重命名为 CoursesView
和 CoursesPresenter
,要么将 fxml 文件重命名为 course.fxml
.