将Perametertype转换为无法正常工作的类

时间:2018-07-17 06:45:17

标签: java javafx

我正在使用JavaFx。我想显示javaFX类中使用的Number of Node。为此,我要获取类及其启动方法。

NodeClassTree是我仅使用start方法和

创建的javaFX类

在以下代码中,我得到了启动方法。然后我将方法的性能参数作为类。

但是我无法将该类转换为Stage Class对象。

public static void main(String[] args)
    {
        try
        {
            Method myClasss = NodeClassTree.class.getDeclaredMethod("start",Stage.class);

            System.out.println(myClasss.getParameterTypes()[0].getCanonicalName());

            Class<?> stg = myClasss.getParameterTypes()[0];

            System.out.println(stg);

            stg.cast(new Stage()); //.........[1] Not Working

            //stg.cast(new Object()); //.........[2] Not Working
        }
        catch(Exception e)
        {
            System.err.println("ERROR : "+e);
        }
    }

NodeClassTree.java

    public class NodeClassTree extends Application {

        @Override
        public void start(Stage primaryStage){
            BorderPane bdrpn = new BorderPane();
        Scene cin = new Scene(bdrpn);
primaryStage.setScene(cin);

        }

        public static void main(String[] args) {
            launch(args);
        }
    }

错误

Exception in thread "main" java.lang.ExceptionInInitializerError
    at javafx.stage.Window.<init>(Window.java:1191)
    at javafx.stage.Stage.<init>(Stage.java:239)
    at javafx.stage.Stage.<init>(Stage.java:227)
    at application.Controls.GetTree.main(GetTree.java:21)
Caused by: java.lang.IllegalStateException: This operation is permitted on the event thread only; currentThread = main
    at com.sun.glass.ui.Application.checkEventThread(Application.java:443)
    at com.sun.glass.ui.Screen.setEventHandler(Screen.java:285)
    at com.sun.javafx.tk.quantum.QuantumToolkit.setScreenConfigurationListener(QuantumToolkit.java:667)
    at javafx.stage.Screen.<clinit>(Screen.java:79)
    ... 4 more

我使用getCanonicalName()获得了类的名称,但是我想将geterameterTypes()[0]转换为Stage类之后,我想获得Scene对象

2 个答案:

答案 0 :(得分:0)

正如异常所示,您正在非UI线程上进行UI更新。您应该使用Platform.runLater()

答案 1 :(得分:0)

我没有对此进行测试,因此它可能无法正常工作。实际上,我想说这很可能有效,但是您可以尝试

public class GetTree extends Application {
    @Override
    public void start(Stage primaryStage){
        Application appToTest = new NodeClassTree();
        appToTest.start(primaryStage);

        Scene scene = primaryStage.getScene();
        // And so on...
    }

    public static void main(String[] args) {
        launch(args);
    }
}