使用JavaFX的HTMLEditor进行NPE

时间:2017-01-21 21:25:57

标签: java javafx javafx-8

我写了一个相对简单的测试类:

public class Main extends Application {

    @Override public void start(Stage stage) {
        BorderPane root = new BorderPane();
        Scene scene = new Scene(root, 400, 400);

        HTMLEditor editor = new HTMLEditor();
        root.setCenter(editor);

        Platform.runLater(editor::requestFocus);

        stage.setScene(scene);
        stage.show();
    }

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

}

如果我运行它(编辑器有焦点),我会看到这个相当暗淡的窗口,如果我输入任何内容,我会立即得到NullPointerException

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
    at com.sun.javafx.scene.web.skin.HTMLEditorSkin.applyTextFormatting(HTMLEditorSkin.java:1100)
    at com.sun.javafx.scene.web.skin.HTMLEditorSkin.lambda$new$3(HTMLEditorSkin.java:293)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
...

enter image description here

我最初注意到的三件事是:

  1. 错误似乎与HTMLEditorSkin有关,所以我尝试应用一个,但Eclipse告诉我这个类不是API。我如何使用它(如果我应该),如果是,我应该进行访问限制(因为JavaFX本身也不是API)?
  2. HTMLEditor看起来没有重点,并且默认情况下没有选定的字体(我认为这是造成问题的地方。)
  3. HTMLEditorSkin来自包层次结构com.sun.javafx,而不是javafx
  4. 然而,根据first example of Oracle's tutorial,我似乎正在做所有事情。

    这里出了什么问题?感觉这可能是一个错误。

    尝试过的解决方案和已经收到的答案:

    1. 使用setHtmlText设置初始文字。
      setHtmlText("<body style='font-family: something;'>text</body>");
      它确实设置了文字和字体,但编辑器不受影响。
    2. 使用setStyle设置样式。
      setStyle("-fx-font: 12 something");
      这只会更改UI字体。
    3. 安装JDK 8u122。

1 个答案:

答案 0 :(得分:0)

引发错误是因为由于存在错误,HtmlEditor默认情况下不设置字体系列,当您开始输入时,没有选择字体,因此您将获得NPE。请注意,如果在开始键入之前选择字体系列,则不会引发错误。

为了避免此错误升级到JDK 8u122。 (在Kubuntu 16.10上使用jre-8u122-ea-bin-b04-linux-x64-25_oct_2016

进行了测试

P.S。我没有检查以前的版本。这可以在早期版本中修复,但它存在于8u111