1

問題を 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.fxmlFXMLLoader を使用してファイルをロードしようとしていますが、最終的には次のようになります。

クラス javafx.fxml.FXMLLoader$ValueElement は、"private" 修飾子を持つクラス com.myapp.controllers.MainWindow のメンバーにアクセスできません

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 は、プライベートなコントローラーのプロパティにアクセスしようとします。ただし、コントローラーにはプライベート メンバーがありません。

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

何が問題なのですか?

4

1 に答える 1

1

エラーは、プライベート コンストラクターを指しています。Scala でコンストラクターを明示的に公開する必要がありますか? javap を使用して、コンパイルされたものを確認できます。

于 2012-10-07T12:36:47.593 に答える