Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8095860

BSS (Binary CSS) throws an NPE immediately upon trying to add it

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • None
    • 8u5, 8u11, 8u20
    • javafx
    • netbeans 8.0, java 8u20 32-bit, windows 7 professional.

      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.

            dgrieve David Grieve
            duke J. Duke
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported: