JavaFX の Hello World で NullPointerException
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class Hello extends Application { @Override public void start(Stage stage) { stage.setTitle("Welcome to JavaFX!"); StackPane root = new StackPane(); Scene scene = new Scene(root, 300, 200); stage.setScene(scene); Label label = new Label("Hello World!"); root.getChildren().add(label); stage.show(); } public static void main(String[] args) { launch(args); } }
これ実行すると画面は出るけど NullPointerException が出る。よくわかんねぇ…。ちなみに JavaFX 2.0.3 です。
追記 : root.getChildren().add(label) の行をコメントアウトするとぬるぽ出ない。これと stacktrace を合わせて考えるとフォント絡みか ?
参考 : stacktrace
java.lang.NullPointerException at com.sun.t2k.T2KFontFactory.resolveFontFiles(T2KFontFactory.java:828) at com.sun.t2k.T2KFontFactory.resolveWindowsFonts(T2KFontFactory.java:786) at com.sun.t2k.T2KFontFactory.getFullNameToFileMap(T2KFontFactory.java:1351) at com.sun.t2k.T2KFontFactory.getFontResource(T2KFontFactory.java:212) at com.sun.t2k.LogicalFont.getSlot0Resource(LogicalFont.java:174) at com.sun.t2k.LogicalFont.getDefaultAAMode(LogicalFont.java:300) at com.sun.t2k.LogicalFont.getStrike(LogicalFont.java:304) at com.sun.t2k.T2KFont.getStrike(T2KFont.java:70) at com.sun.javafx.font.PrismFontUtils.getFontMetrics(PrismFontUtils.java:14) at com.sun.javafx.font.PrismFontLoader.getFontMetrics(PrismFontLoader.java:434) at javafx.scene.text.Text.<init>(Text.java:103) at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:124) at com.sun.javafx.scene.control.skin.LabelSkin.<init>(LabelSkin.java:38) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at javafx.scene.control.Control.loadSkinClass(Control.java:928) at javafx.scene.control.Control.impl_cssSet(Control.java:1006) at javafx.scene.control.Labeled.impl_cssSet(Labeled.java:625) at javafx.scene.Node.impl_cssSet(Node.java:6395) at com.sun.javafx.css.StyleHelper.transitionToState(StyleHelper.java:755) at javafx.scene.Node.impl_processCSS(Node.java:6247) at javafx.scene.Parent.impl_processCSS(Parent.java:965) at javafx.scene.control.Control.impl_processCSS(Control.java:1033) at javafx.scene.Parent.impl_processCSS(Parent.java:972) at javafx.scene.Node.processCSS(Node.java:6215) at javafx.scene.Scene.doCSSPass(Scene.java:385) at javafx.scene.Scene.preferredSize(Scene.java:1187) at javafx.scene.Scene.impl_preferredSize(Scene.java:1231) at javafx.stage.Window.adjustSize(Window.java:139) at javafx.stage.Window.access$700(Window.java:50) at javafx.stage.Window$13.invalidated(Window.java:692) at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:88) at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:122) at javafx.stage.Window.setShowing(Window.java:744) at javafx.stage.Window.show(Window.java:759) at javafx.stage.Stage.show(Stage.java:129) at sample.Hello.start(Hello.java:19) at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:298) at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:152) at com.sun.javafx.application.PlatformImpl$3.run(PlatformImpl.java:119) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29) at com.sun.glass.ui.win.WinApplication$2$1.run(WinApplication.java:62) at java.lang.Thread.run(Unknown Source) java.lang.NullPointerException at com.sun.t2k.T2KFontFactory.resolveFontFiles(T2KFontFactory.java:828) at com.sun.t2k.T2KFontFactory.resolveWindowsFonts(T2KFontFactory.java:786) at com.sun.t2k.T2KFontFactory.getFullNameToFileMap(T2KFontFactory.java:1351) at com.sun.t2k.T2KFontFactory.getFontResource(T2KFontFactory.java:212) at com.sun.t2k.LogicalFont.getSlot0Resource(LogicalFont.java:174) at com.sun.t2k.LogicalFont.getDefaultAAMode(LogicalFont.java:300) at com.sun.t2k.LogicalFont.getStrike(LogicalFont.java:304) at com.sun.t2k.T2KFont.getStrike(T2KFont.java:70) at com.sun.javafx.font.PrismFontUtils.getFontMetrics(PrismFontUtils.java:14) at com.sun.javafx.font.PrismFontLoader.getFontMetrics(PrismFontLoader.java:434) at javafx.scene.text.Text.<init>(Text.java:103) at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:124) at com.sun.javafx.scene.control.skin.LabelSkin.<init>(LabelSkin.java:38) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at javafx.scene.control.Control.loadSkinClass(Control.java:928) at javafx.scene.control.Control.impl_cssSet(Control.java:1006) at javafx.scene.control.Labeled.impl_cssSet(Labeled.java:625) at javafx.scene.Node.impl_cssSet(Node.java:6395) at com.sun.javafx.css.StyleHelper.transitionToState(StyleHelper.java:755) at javafx.scene.Node.impl_processCSS(Node.java:6247) at javafx.scene.Parent.impl_processCSS(Parent.java:965) at javafx.scene.control.Control.impl_processCSS(Control.java:1033) at javafx.scene.Parent.impl_processCSS(Parent.java:972) at javafx.scene.Node.processCSS(Node.java:6215) at javafx.scene.Scene.doCSSPass(Scene.java:385) at javafx.scene.Scene.preferredSize(Scene.java:1187) at javafx.scene.Scene.impl_preferredSize(Scene.java:1231) at javafx.stage.Window.adjustSize(Window.java:139) at javafx.stage.Window.access$700(Window.java:50) at javafx.stage.Window$13.invalidated(Window.java:692) at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:88) at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:122) at javafx.stage.Window.setShowing(Window.java:744) at javafx.stage.Window.show(Window.java:759) at javafx.stage.Stage.show(Stage.java:129) at sample.Hello.start(Hello.java:19) at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:298) at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:152) at com.sun.javafx.application.PlatformImpl$3.run(PlatformImpl.java:119) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29) at com.sun.glass.ui.win.WinApplication$2$1.run(WinApplication.java:62) at java.lang.Thread.run(Unknown Source) java.lang.NullPointerException at com.sun.t2k.T2KFontFactory.resolveFontFiles(T2KFontFactory.java:828) at com.sun.t2k.T2KFontFactory.resolveWindowsFonts(T2KFontFactory.java:786) at com.sun.t2k.T2KFontFactory.getFullNameToFileMap(T2KFontFactory.java:1351) at com.sun.t2k.T2KFontFactory.getFontResource(T2KFontFactory.java:212) at com.sun.t2k.LogicalFont.getSlot0Resource(LogicalFont.java:174) at com.sun.t2k.LogicalFont.getDefaultAAMode(LogicalFont.java:300) at com.sun.t2k.LogicalFont.getStrike(LogicalFont.java:304) at com.sun.t2k.T2KFont.getStrike(T2KFont.java:70) at com.sun.javafx.font.PrismFontUtils.getFontMetrics(PrismFontUtils.java:14) at com.sun.javafx.font.PrismFontLoader.getFontMetrics(PrismFontLoader.java:434) at javafx.scene.text.Text.<init>(Text.java:103) at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:124) at com.sun.javafx.scene.control.skin.LabelSkin.<init>(LabelSkin.java:38) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at javafx.scene.control.Control.loadSkinClass(Control.java:928) at javafx.scene.control.Control.impl_cssSet(Control.java:1006) at javafx.scene.control.Labeled.impl_cssSet(Labeled.java:625) at javafx.scene.Node.impl_cssSet(Node.java:6395) at com.sun.javafx.css.StyleHelper.transitionToState(StyleHelper.java:755) at javafx.scene.Node.impl_processCSS(Node.java:6247) at javafx.scene.Parent.impl_processCSS(Parent.java:965) at javafx.scene.control.Control.impl_processCSS(Control.java:1033) at javafx.scene.Parent.impl_processCSS(Parent.java:972) at javafx.scene.Node.processCSS(Node.java:6215) at javafx.scene.Scene.doCSSPass(Scene.java:385) at javafx.scene.Scene.preferredSize(Scene.java:1187) at javafx.scene.Scene.impl_preferredSize(Scene.java:1231) at javafx.stage.Window.adjustSize(Window.java:139) at javafx.stage.Window.access$700(Window.java:50) at javafx.stage.Window$13.invalidated(Window.java:692) at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:88) at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:122) at javafx.stage.Window.setShowing(Window.java:744) at javafx.stage.Window.show(Window.java:759) at javafx.stage.Stage.show(Stage.java:129) at sample.Hello.start(Hello.java:19) at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:298) at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:152) at com.sun.javafx.application.PlatformImpl$3.run(PlatformImpl.java:119) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29) at com.sun.glass.ui.win.WinApplication$2$1.run(WinApplication.java:62) at java.lang.Thread.run(Unknown Source)
2012/05/14 追記 : 最新版の JavaFX 2.1 では改善されているようです。