为了更好的可读性,我已经移动了一些在类中生成GUI的代码。不幸的是,我不得不在某处犯错,因为现在我收到了这个错误:
线程中的异常" AWT-EventQueue-0"
java.lang.NullPointerException
在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();
这个类中有一个方法可以将tabPane
设置为null,但我决定不调用它:
public void uninstallUI(JComponent c) {
uninstallKeyboardActions();
uninstallListeners();
uninstallDefaults();
uninstallComponents();
c.setLayout(null);
this.tabPane = null;
}
我使用TabbedWindow类创建选项卡式GUI:
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.");
我现在的问题是:
答案 0 :(得分:0)
我无法确定真正的原因,但uninstallUI
已被调用,因为我在添加其他元素之前使用了container.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
。
因为我坦率地不明白整个事情是如何运作的所以我决定采取安全的方式:
public void close() {
container.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
closed = true;
}
在调用close之后,不再有任何东西可以添加到GUI中。