私はいくつかの非常に基本的なチュートリアルに従っています。私の環境は次のとおりです。 Java 7 oracle SDK Netbeans 7.3.1 JavaFX SceneBuilder 1.1
プロジェクト ウィザードに、main と呼ばれる最初の FXML を生成するように依頼しました。
その上にボタンがあり、fx ID「ラベル」のラベルがあります。クリックすると、ラベルが「Hello, World!」に設定されます。ここまでは順調ですね。
本当に簡単なことをしたい: ID "label2" の別のラベルを追加し、コントローラーにボタンイベントを追加します: label2.setText("something else");
ただし、これは失敗します。理由がわかりません。詳細:
FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="200.0" prefWidth="320.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="fs2i.mainController">
<children>
<Button id="button" layoutX="14.0" layoutY="165.0" onAction="#handleClickMeButtonAction" text="Say Hi!" />
<Label fx:id="label" layoutX="72.0" layoutY="120.0" minHeight="16.0" minWidth="69.0" />
<Label fx:id="label2" layoutX="72.0" layoutY="41.0" prefWidth="88.0" />
<Button id="Exit" layoutX="240.0" layoutY="165.0" mnemonicParsing="false" onAction="#handleExitButtonAction" text="Exit" />
</children>
</AnchorPane>
コントローラ:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fs2i;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
/**
*
* @author nicolas
*/
public class mainController implements Initializable {
@FXML
private Label label;
@FXML
private Label label2;
@FXML
private void handleClickMeButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
label.setText("Hello World!");
label2.setText("Something else.");
}
@FXML
private void handleExitButtonAction(ActionEvent event){
Platform.exit();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
[Say Hi] ボタンをクリックすると、次のように表示されます。
ログ:
You clicked me!
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1449)
コントローラーで label2 の繰り返しを削除すると、すべてが再び機能します。
奇妙なことに、最初のテキスト「Init」で label2 を初期化すると、アプリケーションを起動しても表示されません。
私が間違っている可能性があることに光を当てるための助けを探しています。