无法在其他类中使用JavaFX程序的静态方法

无法在其他类中使用JavaFX程序的静态方法,java,javafx,Java,Javafx,我创建了一个方法,在调用时显示带有适当信息的对话框。我创建了另一个测试类来调用和测试我前面提到的方法。当我使用这个测试类调用这个方法时,它显示了一些我无法解决的错误。先谢谢你 package my_classes; import javafx.stage.*; import javafx.geometry.Pos; import javafx.scene.*; import javafx.scene.control.*; import javaf

我创建了一个方法,在调用时显示带有适当信息的对话框。我创建了另一个测试类来调用和测试我前面提到的方法。当我使用这个测试类调用这个方法时,它显示了一些我无法解决的错误。先谢谢你

    package my_classes;

    import javafx.stage.*;
    import javafx.geometry.Pos;
    import javafx.scene.*;
    import javafx.scene.control.*;
    import javafx.scene.layout.*;

    public class MessageBox
    {
        public static void show(String label, String button, String title, int xaxis, int yaxis)
        {
            Stage window=new Stage();
            Scene sc;
            Button btn=new Button(button);
            btn.setOnAction(e -> window.close());
            Label lbl=new Label(label);
            window.setTitle(title);
            VBox vb=new VBox(50);
            vb.getChildren().addAll(lbl,btn);
            vb.setAlignment(Pos.CENTER);
            sc=new Scene(vb,xaxis,yaxis);
            window.setMaxHeight(yaxis+100);
            window.setMaxWidth(xaxis+100);
            window.setMinHeight(yaxis-100);
            window.setMinWidth(xaxis-100);
            window.initModality(Modality.APPLICATION_MODAL);
            window.setScene(sc);
            window.showAndWait();
        }
    }


您需要使用正常的JavaFX应用程序启动过程。这意味着从类继承并使用
launch()
方法来正确初始化JavaFX运行时

例如:

public class MyApplication extends Application {
    /**
     * Initialize the application
     *
     * @param args The application arguments
     */
    public static void main(final String[] args) {
        launch(args);
    }

    @Override
    public void start(final Stage primaryStage) {
       // Code here
    }
}
请慢慢阅读JavaFX文档:

错误状态为:“仅允许在事件线程上执行此操作”;您需要从JavaFX事件线程调用此操作。如果您从start()方法调用它(如果您将应用程序子类化,则此方法可用),则会自动执行。您可以使用
Platform.runLater(java.lang.Runnable)
执行此操作。请使用java命名约定。。别忘了学习javafx应用程序basicskleopatra的教程——我通常重写start方法,在main方法中使用launch方法,然后继续编程。但我这样做是因为我在一本书中看到了这种结构,我想尝试一下。注意:如果需要(出于某种原因),也可以使用
Platform\startup(Runnable)
。我通常重写start方法,在main方法中使用launch方法,然后继续编程。但我这样做是因为我在一本书中看到了这种结构,我想尝试一下。我可以问一下@Neo,那是哪本书?在我看来,他们似乎错过了大量实际初始化JavaFX运行时的工作。
public class MyApplication extends Application {
    /**
     * Initialize the application
     *
     * @param args The application arguments
     */
    public static void main(final String[] args) {
        launch(args);
    }

    @Override
    public void start(final Stage primaryStage) {
       // Code here
    }
}