我正在使用JavaFx。我想显示javaFX类中使用的Number of Node。为此,我要获取类及其启动方法。
NodeClassTree
是我仅使用start方法和
在以下代码中,我得到了启动方法。然后我将方法的性能参数作为类。
但是我无法将该类转换为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
对象
答案 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);
}
}