BasicTabbedPaneUI.tabPane 变为 null - 是什么原因导致的,我该如何调试它?

BasicTabbedPaneUI.tabPane becomes null - what could cause that and how can I debug it?

为了更好的可读性,我在 classes 中移动了一些生成我的 GUI 的代码。不幸的是,我不得不在某个地方犯了一个错误,因为现在我收到了这个错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at javax.swing.plaf.basic.BasicTabbedPaneUI$ScrollableTabSupport.updateView(BasicTabbedPaneUI.java:3351)

它发生在 javax/swing/plaf/basic/BasicTabbedPaneUI.java 这一行:

       private void updateView() {
ERROR HERE: int tabPlacement = tabPane.getTabPlacement();
            int tabCount = tabPane.getTabCount();

这个 class 中有一个方法可以将 tabPane 设置为 null,但我绝对不会调用它:

public void uninstallUI(JComponent c) {
    uninstallKeyboardActions();
    uninstallListeners();
    uninstallDefaults();
    uninstallComponents();
    c.setLayout(null);

    this.tabPane = null;
}

我使用我的 TabbedWindow 创建了选项卡式 GUI class:

public final JTabbedPane container;
  public TabbedWindow() {
    container = new JTabbedPane();
    container.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
    //More code but nothing with container
  }

然后我将其附加到主 JPane:

public void createTabs(Container pane) {
    pane.setLayout(new GridLayout(1, 1));
    System.out.println("Creating tabbed window.");
    TabbedWindow win = new TabbedWindow();
    //Inbetween, I append some JFrames to the win.container
    //Adding to main pane:
    pane.add(win.container);
    System.out.println("Done.");

我现在的问题是:

  1. 在 java 库中可能导致此问题的原因是什么?为什么它不抛出更有帮助的异常?
  2. 如何调试这个问题并找出问题所在?

我不能确定真正的原因,但是 uninstallUI 已经被调用,因为我在附加其他元素之前使用了 container.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);

因为坦率地说我不明白整个事情是如何运作的,所以我决定走安全的路:

  public void close() {
    container.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
    closed = true;
  }

并且在调用关闭之后,无法再向 GUI 添加任何内容。