Relatively self-explanatory, when trying to add a .css file that is converted to binary (and thus a .bss file), javafx throws a NPE.
A basic example of this can be seen with the following code:
MenuBarTest.java:
/**
*
* @author William
*/
public class MenuBarTest extends Application {
@Override
public void start(Stage stage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("style/testFXML.fxml"));
root.getStylesheets().add(getClass().getResource("style/test.css").toExternalForm());
Scene scene = new Scene(root);
//scene.getStylesheets().add(getClass().getResource("css/Calendar.css").toExternalForm());
//scene.
stage.setScene(scene);
// ScenicView.show(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
style/test.css:
/*
Created on : Aug 7, 2014, 12:01:31 PM
Author : William
*/
.menu .label{
-fx-text-fill: black;
}
#menuBar
{
-fx-background-color: linear-gradient(to bottom, #ebeced, #b5bcc6);
}
style/testFXML.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1">
<MenuBar id="menuBar" fx:id="menu" depthTest="DISABLE" focusTraversable="true" pickOnBounds="true" prefHeight="24.0" prefWidth="860.0">
<menus>
<Menu id="menu_file" text="File" fx:id="menu_file">
<items>
<MenuItem id="close1" text="Close" />
</items>
</Menu>
<Menu id="menu_tools" text="Data">
<items>
<MenuItem id="menuItem1" text="Meta data" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Tools">
<items>
<MenuItem mnemonicParsing="false" text="Read File" />
</items>
</Menu>
<Menu id="menu_about" text="About">
<items>
<MenuItem id="cf_f_mi_abt_mag" text="MagVAR" fx:id="cf_f_mi_abt_mag" />
</items>
</Menu>
<Menu id="menu_help" text="Help">
<items>
<MenuItem id="menuItem2" text="Read Me" fx:id="cf_menu_hel_red" />
<MenuItem id="menuItem3" text="Software Manual" />
<MenuItem id="menuItem4" text="Calculator Version" />
<MenuItem id="menuItem5" text="Feedback" />
</items>
</Menu>
</menus>
</MenuBar>
</AnchorPane>
Using netbeans I simply chose the "Binary Encode JavaFX CSS Files" option under 'Project properties > build > Packaging" . Or you can reproduce this behaviour with the javafx gradle plugin, with runs a 'cssToBin' task by default, and creates some interesting undefined behaviour. stack trace below:
Executing C:\Users\William\Documents\compactJRE\dist\run1706831133\compactJRE.jar using platform C:\Program Files (x86)\Java\jdk1.8.0_20/bin/java
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:363)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:303)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:875)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(LauncherImpl.java:157)
at com.sun.javafx.application.LauncherImpl$$Lambda$48/9727497.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
at graphtest.MenuBarTest.start(MenuBarTest.java:20)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(LauncherImpl.java:821)
at com.sun.javafx.application.LauncherImpl$$Lambda$51/926275.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(PlatformImpl.java:323)
at com.sun.javafx.application.PlatformImpl$$Lambda$44/14208992.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl.java:292)
at com.sun.javafx.application.PlatformImpl$$Lambda$47/16186433.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformImpl.java:291)
at com.sun.javafx.application.PlatformImpl$$Lambda$46/31501478.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/29531133.run(Unknown Source)
... 1 more
Exception running application graphtest.MenuBarTest
Java Result: 1
obviously a workaround is to simply not use it, but that seems like an unfortunate thing to require.
A basic example of this can be seen with the following code:
MenuBarTest.java:
/**
*
* @author William
*/
public class MenuBarTest extends Application {
@Override
public void start(Stage stage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("style/testFXML.fxml"));
root.getStylesheets().add(getClass().getResource("style/test.css").toExternalForm());
Scene scene = new Scene(root);
//scene.getStylesheets().add(getClass().getResource("css/Calendar.css").toExternalForm());
//scene.
stage.setScene(scene);
// ScenicView.show(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
style/test.css:
/*
Created on : Aug 7, 2014, 12:01:31 PM
Author : William
*/
.menu .label{
-fx-text-fill: black;
}
#menuBar
{
-fx-background-color: linear-gradient(to bottom, #ebeced, #b5bcc6);
}
style/testFXML.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1">
<MenuBar id="menuBar" fx:id="menu" depthTest="DISABLE" focusTraversable="true" pickOnBounds="true" prefHeight="24.0" prefWidth="860.0">
<menus>
<Menu id="menu_file" text="File" fx:id="menu_file">
<items>
<MenuItem id="close1" text="Close" />
</items>
</Menu>
<Menu id="menu_tools" text="Data">
<items>
<MenuItem id="menuItem1" text="Meta data" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Tools">
<items>
<MenuItem mnemonicParsing="false" text="Read File" />
</items>
</Menu>
<Menu id="menu_about" text="About">
<items>
<MenuItem id="cf_f_mi_abt_mag" text="MagVAR" fx:id="cf_f_mi_abt_mag" />
</items>
</Menu>
<Menu id="menu_help" text="Help">
<items>
<MenuItem id="menuItem2" text="Read Me" fx:id="cf_menu_hel_red" />
<MenuItem id="menuItem3" text="Software Manual" />
<MenuItem id="menuItem4" text="Calculator Version" />
<MenuItem id="menuItem5" text="Feedback" />
</items>
</Menu>
</menus>
</MenuBar>
</AnchorPane>
Using netbeans I simply chose the "Binary Encode JavaFX CSS Files" option under 'Project properties > build > Packaging" . Or you can reproduce this behaviour with the javafx gradle plugin, with runs a 'cssToBin' task by default, and creates some interesting undefined behaviour. stack trace below:
Executing C:\Users\William\Documents\compactJRE\dist\run1706831133\compactJRE.jar using platform C:\Program Files (x86)\Java\jdk1.8.0_20/bin/java
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:363)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:303)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:875)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(LauncherImpl.java:157)
at com.sun.javafx.application.LauncherImpl$$Lambda$48/9727497.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
at graphtest.MenuBarTest.start(MenuBarTest.java:20)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(LauncherImpl.java:821)
at com.sun.javafx.application.LauncherImpl$$Lambda$51/926275.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(PlatformImpl.java:323)
at com.sun.javafx.application.PlatformImpl$$Lambda$44/14208992.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl.java:292)
at com.sun.javafx.application.PlatformImpl$$Lambda$47/16186433.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformImpl.java:291)
at com.sun.javafx.application.PlatformImpl$$Lambda$46/31501478.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/29531133.run(Unknown Source)
... 1 more
Exception running application graphtest.MenuBarTest
Java Result: 1
obviously a workaround is to simply not use it, but that seems like an unfortunate thing to require.