美好的一天,
为什么JavaFX有问题,如果我在方法之外创建一个静态标签,但是doesen对于像球体或矩形这样的形状有同样的问题。
以下工作正常:
id volume saturation time_delay_normalised speed \
27WESTBOUND 580 0.351515 57 6.542484
27WESTBOUND 588 0.356364 100 5.107143
27WESTBOUND 475 0.287879 64 6.256250
27EASTBOUND 401 0.243030 59 6.458065
27EASTBOUND 438 0.265455 46 7.049296
27EASTBOUND 467 0.283030 58 6.500000
BPR_free_speed BPR_speed Volume time_normalised free_capacity
17.88 15.913662 580 1.593750 475.0
17.88 15.865198 588 2.041667 475.0
17.88 16.511613 475 0.666667 475.0
17.88 16.882837 401 1.091458 467.0
17.88 16.703004 438 1.479167 467.0
17.88 16.553928 467 0.960417 467.0
但是这会产生一个例外:
static Rectangle upperBorder = new Rectangle(0, 0, 10, 10);
我必须通过以下方式创建Label:
static Label myScore = new Label("Test");
没有"静态"关键字。
这是错误:
Label myScore = new Label("Test");
答案 0 :(得分:2)
错误很可能不是由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
之前初始化Platform:
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
不是。如果没有正在运行的JavaFX平台,则无法实例化Label
。