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.");
我现在的问题是:
- 在 java 库中可能导致此问题的原因是什么?为什么它不抛出更有帮助的异常?
- 如何调试这个问题并找出问题所在?
我不能确定真正的原因,但是 uninstallUI
已经被调用,因为我在附加其他元素之前使用了 container.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
。
因为坦率地说我不明白整个事情是如何运作的,所以我决定走安全的路:
public void close() {
container.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
closed = true;
}
并且在调用关闭之后,无法再向 GUI 添加任何内容。
为了更好的可读性,我在 classes 中移动了一些生成我的 GUI 的代码。不幸的是,我不得不在某个地方犯了一个错误,因为现在我收到了这个错误:
Exception in thread "AWT-EventQueue-0"
java.lang.NullPointerException
atjavax.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.");
我现在的问题是:
- 在 java 库中可能导致此问题的原因是什么?为什么它不抛出更有帮助的异常?
- 如何调试这个问题并找出问题所在?
我不能确定真正的原因,但是 uninstallUI
已经被调用,因为我在附加其他元素之前使用了 container.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
。
因为坦率地说我不明白整个事情是如何运作的,所以我决定走安全的路:
public void close() {
container.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
closed = true;
}
并且在调用关闭之后,无法再向 GUI 添加任何内容。