为什么我的javafx阶段不想加载

时间:2015-02-07 20:50:35

标签: java javafx

这是java

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.stage.Stage;

public class mains extends Stage {

public static void main(String[] args) {
    new JFXPanel();
    Platform.runLater(new Runnable(){

        @Override
        public void run() {
            new mains();
        }

    });
}
void go(){
    new JFXPanel();
    new mains().show();
}

public mains() {
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(
            "LOL.fxml"));
    fxmlLoader.setRoot(this);
    fxmlLoader.setController(this);

    try {
        fxmlLoader.load();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@FXML
private Button button;

@FXML
private Label label;

@FXML
void push(ActionEvent event) {

}

}

这里是fxml http://pastebin.com/uzBrMRDV 我得到一个加载异常,它说已经指定了Root。 如果我删除setRoot(this);它根本没有负载 我对JFX感到非常沮丧...... 无论如何从控制器本身加载像Stage这样的FXML文件

1 个答案:

答案 0 :(得分:6)

删除行

fxmlLoader.setRoot(this);

您的FXML将根定义为AnchorPane(并且您无法将根设置两次,这就是您收到错误的原因)。

由于当前班级为Stage,而FXMLLoader加载AnchorPane,您需要将加载的AnchorPane放入Scene并设置舞台上的场景。取代

fxmlLoader.load();

AnchorPane root = fxmlLoader.load();
Scene scene = new Scene(root); // optionally specify dimensions too
this.setScene(scene);