JavaFX无法从使用Start的NetBeans中的非FX项目启动

时间:2013-11-29 02:08:11

标签: java exception netbeans javafx-2

我遇到的问题是,当我在NetBeans中创建一个新的JavaFX项目时,主方法被忽略,并且以某种方式调用start()并且一切都很好,但是每当我尝试调用start我风的时候除了例外。我使用的课程:

public final class JFXDriver extends Application {

public JFXDriver() {
    Application.launch();
}

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("GUI.fxml"));
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
}
}

我试图使用构造函数启动它,但它失败了(抛出一个异常),因为某种原因说它被多次调用,这应该是不可能的,因为我从main方法构造了这个类只有new JFXDriver();

2 个答案:

答案 0 :(得分:2)

你在代码中做错了。您不应该在构造函数中调用launch。您应该在main中调用它并传递扩展Application的类的名称。

这会导致系统调用init然后启动,从而开始应用程序的生命周期。有关更详细的说明,请查看此处:http://codelatte.wordpress.com/2013/11/15/getting-started-with-javafx-hello-world-2/

您是否正在尝试Swing和FX互操作?

答案 1 :(得分:1)

好吧,我找到了问题的解决方案。我补充说:

public static void start() {
    Application.launch();
}

并在构造函数中取消对Application.launch()的调用。这种方法奏效了。我猜JavaFX线程创建了自己的类实例,导致Application.launch()不止一次被调用。有趣的是,如果没有一个应用程序限制,我想知道由于调用的递归性质,这是否会导致StackOverflowException。