带有static关键字的JavaFX问题;最小,完整和可验证的例子
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了带有static关键字的JavaFX问题;最小,完整和可验证的例子,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2354字,纯文字阅读大概需要4分钟。
内容图文
![带有static关键字的JavaFX问题;最小,完整和可验证的例子](/upload/InfoBanner/zyjiaocheng/707/bc28bc94fd9b41afbd4dd732b6996842.jpg)
美好的一天,
当我运行此代码时:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class mcve extends Application {
static Label myScore = new Label("Test");
static Rectangle rect = new Rectangle(0,0,10,10);
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
myScore.setTextFill(Color.WHITE);
myScore.setLayoutY(20);
myScore.setLayoutX(200);
myScore.setFont(new Font("Arial", 30));
myScore.setText("0");
rect.setFill(Color.WHITE);
final Group group = new Group(myScore,rect);
Scene scene = new Scene(group, 500, 500, Color.BLACK);
stage.setScene(scene);
stage.show();
}
}
它会创建以下异常:
Exception in thread "main" java.lang.ExceptionInInitializerError
at mcve.<clinit>(mcve.java:11)
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
但是,如果我在顶部的Label之前删除static关键字,则代码运行正常.
我的问题是:为什么在创建静态Label而不是静态Rectangle时会发生错误?我希望Label是静态的,而不是类的对象.
解决方法:
Why does the error occur when creating a
static Label
but not astatic Rectangle
?
本质上,这是初始化顺序的问题.创建Node对象时,需要正确初始化UI平台.潜在地,它也可能发生在Rectangle中,但很可能Label(它是一个Control)更依赖于正确初始化的平台.在这种特殊情况下,不同之处在于Shape对象不需要CSS,而Control对象则需要CSS.这会导致在堆栈跟踪中看到平台方法,此时工具箱尚未初始化.
>加载类mvce时初始化静态类成员.这是在调用main()方法之前完成的,因此在调用launch()方法之前完成.此时平台尚未初始化.
>另一方面,在实例化类mvce时初始化非静态成员.在正确初始化工具包之后,类mvce在内部由launch()方法实例化.
此外,通常没有理由使用静态引用.只需使用会员.
内容总结
以上是互联网集市为您收集整理的带有static关键字的JavaFX问题;最小,完整和可验证的例子全部内容,希望文章能够帮你解决带有static关键字的JavaFX问题;最小,完整和可验证的例子所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。