java - 如何使用FXMLLoader?

标签 java scala javafx-2 javafx

我已将问题简化为 Scala + JavaFX 2 的 FXMLLoader 的简单代码行:

val path = "/com/myapp/views/main.fxml"

val loader = new FXMLLoader()
loader.setLocation(getClass.getResource(path))

val root = loader.load(getClass.getResourceAsStream(path)).asInstanceOf[Parent]

我正在尝试加载 main.fxml使用 FXMLLoader 文件,但我最终得到:

Class javafx.fxml.FXMLLoader$ValueElement can not access a member of class com.myapp.controllers.MainWindow with modifiers "private"

FXML 代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.collections.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.Scene?>
<?import javafx.scene.control.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?import javafx.scene.text.*?>

<BorderPane fx:controller="com.myapp.controllers.MainWindow" fx:id="mainWindow" prefHeight="703.0" prefWidth="803.0" xmlns:fx="http://javafx.com/fxml">
  <stylesheets>
    <URL value="@../styles/Styles.css" />
  </stylesheets>
  <top>
  ...

根据错误消息,JavaFX 的 FXMLLoader 尝试访问我的 Controller 的某些私有(private)属性。但是,我在 Controller 中没有私有(private)成员:

class MainWindow extends Initializable {
  override def initialize(location: URL, resourceBundle: java.util.ResourceBundle) {
    print("init")
  }
}

可能是什么问题?

最佳答案

错误指向私有(private)构造函数。您需要在 Scala 中显式地公开构造函数吗?您可以使用javap来查看编译后的内容。

关于java - 如何使用FXMLLoader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768623/

相关文章:

由于构造函数参数(属性)在基类和派生类中具有相同名称并在派生方法中使用,Scala 编译器错误

wpf - JavaFX 与 WPF 相比如何?

java - 从多个目录编译java

java - 队列不循环,提前终止?

java - Java 子类中构造函数的行为

java - Scala 无法解析构造函数

java - 如何获取预定作业列表并在 Play Framework 中将其停止?

java - 关闭 JavaFX Stage 后如何释放内存?

java - 替换 JavaFX GridPane 中(行,列)处的节点

java - 从第一个下拉列表jsp中获取值