gpt4 book ai didi

JavaFX 静态与非静态

转载 作者:行者123 更新时间:2023-11-30 02:57:40 25 4
gpt4 key购买 nike

美好的一天,

如果我在方法外部创建静态标签,为什么 JavaFX 会出现问题,但对于球体或矩形等形状不会出现相同的问题。

以下工作正常:

static Rectangle upperBorder = new Rectangle(0, 0, 10, 10);

但这会产生一个异常:

static Label myScore = new Label("Test");

我必须按以下方式创建标签:

Label myScore = new Label("Test");

这没有“static”关键字。

这是错误:

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

最佳答案

该错误很可能不是由 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你的代码中是 LabelControlRectangle不是。 Label如果没有正在运行的 JavaFX 平台,则无法实例化。

关于JavaFX 静态与非静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36792808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com