我遇到的问题是,当我在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();
。
答案 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。