首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaFX静态与非静态

JavaFX静态与非静态
EN

Stack Overflow用户
提问于 2016-04-22 11:36:18
回答 1查看 855关注 0票数 1

日安,

为什么JavaFX有一个问题,如果我在一个方法之外创建一个静态标签,但是对于像球体或矩形这样的形状却没有同样的问题。

以下功能很好:

代码语言:javascript
运行
复制
static Rectangle upperBorder = new Rectangle(0, 0, 10, 10);

但这造成了一个例外:

代码语言:javascript
运行
复制
static Label myScore = new Label("Test");

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

代码语言:javascript
运行
复制
Label myScore = new Label("Test");

这没有“静态”关键字。

这是一个错误:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2016-04-22 12:05:30

错误很可能不是由static关键字引起的。

考虑一下这个简单的测试程序:

代码语言:javascript
运行
复制
public class Test {

   static Rectangle a   = new Rectangle(0, 0, 10, 10);
   static Label     b   = new Label("b");

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

当启动时,它抛出一个异常:

代码语言:javascript
运行
复制
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之前初始化平台:

代码语言:javascript
运行
复制
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
   }
}

RectangleLabel在代码中的区别在于,LabelControl,而Rectangle不是。如果没有运行的Label平台,就无法实例化JavaFX。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36792808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档