【问题标题】:Unexplained NullPointerException in JavaFX applicationJavaFX 应用程序中无法解释的 NullPointerException
【发布时间】:2018-01-20 05:50:41
【问题描述】:

背景信息

为计算机科学创建 JavaFX 应用程序

我在做什么

我调用一个类并打开一个在该类中创建的场景

发生了什么

我得到一个 NullPointerException 堆栈跟踪;见下文。

我的尝试

我曾经打印语句以查看它发生在哪里。它不会发生在创建类的地方,但在类本身中,它就像构造函数中的前两行代码一样存在。

错误

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at com.sun.javafx.scene.input.PickResultChooser.processOffer(PickResultChooser.java:185)
at com.sun.javafx.scene.input.PickResultChooser.offer(PickResultChooser.java:143)
at javafx.scene.Node.impl_intersects(Node.java:4945)
at javafx.scene.layout.Region.impl_pickNodeLocal(Region.java:2942)
at javafx.scene.Node.impl_pickNode(Node.java:4914)
at javafx.scene.Scene$MouseHandler.pickNode(Scene.java:3899)
at javafx.scene.Scene$MouseHandler.access$1600(Scene.java:3485)
at javafx.scene.Scene.pick(Scene.java:1942)
at javafx.scene.Scene.access$6700(Scene.java:159)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3711)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Unknown Source)

此堆栈跟踪在应用程序崩溃之前重复。

我的代码

public class StudentClassView {

    Scene back, scene;
    Stage window;

    public StudentClassView(Classroom classRoom, String student, Scene back, Stage window) {

        // Prepare Interface
        this.back = back;
        this.window = window;

        // Generate content
        String title_s;
        if (classRoom.getCourseAverage() != 0) {
            title_s = classRoom.getCode() + ", " + classRoom.getCourseAverage() + "%";
        } else {
            title_s = classRoom.getCode();
        }
        Label title = new Label(title_s);

        ArrayList<Label> assignments = new ArrayList<Label>();
        ArrayList<Label> scores = new ArrayList<Label>();
        if (classRoom.getAssignments() != null) {
            for (Assignment a : classRoom.getAssignments()) {
                assignments.add(new Label(a.getName()));
                String scoreEntry = a.getScore(student) + " (worth " + a.getWeight() + "%)";
                scores.add(new Label(scoreEntry));
            }
        }

        Button exit_b = new Button("Back");

        // Design layout
        ScrollPane layout = new ScrollPane();
        VBox content = new VBox();
        GridPane grid = new GridPane();
        int ind = 0;
        for (Label a : assignments) {
            grid.add(a, 0, ind);
            ind += 1;
        }
        ind = 0;
        for (Label s : scores) {
            grid.add(s, 1, ind);
            ind += 1;
        }
        content.getChildren().addAll(title, grid, exit_b);
        layout.setContent(layout);
        // Create Interface
        scene = new Scene(layout, 800, 600);

        // Handle events
        exit_b.setOnAction(e->{
            window.setScene(back);
        });

    }

    public Scene getScene() {
        return scene;
    }

}

【问题讨论】:

标签: java javafx error-handling nullpointerexception runtime-error


【解决方案1】:

您不应使用ScrollPane(或其任何祖先),因为它是content 节点。改变

layout.setContent(layout);

类似

layout.setContent(content);

否则,当ScrollPane 的皮肤在第一个布局期间创建时,会在场景层次结构中创建一个圆圈,这会破坏 JavaFX。

【讨论】:

  • 是的,我的内容是我的 VBox,我看不到这个错误。非常感谢。
猜你喜欢
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多