日安,
为什么JavaFX有一个问题,如果我在一个方法之外创建一个静态标签,但是对于像球体或矩形这样的形状却没有同样的问题。
以下功能很好:
static Rectangle upperBorder = new Rectangle(0, 0, 10, 10);
但这造成了一个例外:
static Label myScore = new Label("Test");
我必须以以下方式创建标签:
Label myScore = new Label("Test");
这没有“静态”关键字。
这是一个错误:
Exception in thread "main" java.lang.ExceptionInInitializerError
at pong.Main.<clinit>(Main.java:24)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122)
Caused by: java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:273)
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:268)
at com.sun.javafx.application.PlatformImpl.setPlatformUserAgentStylesheet(PlatformImpl.java:550)
at com.sun.javafx.application.PlatformImpl.setDefaultPlatformUserAgentStylesheet(PlatformImpl.java:512)
at javafx.scene.control.Control.<clinit>(Control.java:87)
... 4 more
发布于 2016-04-22 12:05:30
错误很可能不是由static
关键字引起的。
考虑一下这个简单的测试程序:
public class Test {
static Rectangle a = new Rectangle(0, 0, 10, 10);
static Label b = new Label("b");
public static void main(String[] args) {
}
}
当启动时,它抛出一个异常:
Exception in thread "main" java.lang.ExceptionInInitializerError
at Test.<clinit>(Test.java:7)
Caused by: java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:273)
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:268)
at com.sun.javafx.application.PlatformImpl.setPlatformUserAgentStylesheet(PlatformImpl.java:550)
at com.sun.javafx.application.PlatformImpl.setDefaultPlatformUserAgentStylesheet(PlatformImpl.java:512)
at javafx.scene.control.Control.<clinit>(Control.java:87)
... 1 more
这表明JavaFX应用程序平台尚未启动。在本例中删除static
关键字时,错误似乎消失了,但这是因为代码中没有使用标签b
。
启动与JavaFX应用程序相同的类确保在创建第一个Control
之前初始化平台:
public class Test extends Application {
static Rectangle a = new Rectangle(0, 0, 10, 10);
static Label b = new Label("b");
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
}
}
Rectangle
和Label
在代码中的区别在于,Label
是Control
,而Rectangle
不是。如果没有运行的Label
平台,就无法实例化JavaFX。
https://stackoverflow.com/questions/36792808
复制相似问题