簡體   English   中英

MigLayout中的JTextArea導致NullPointerException

[英]JTextArea in MigLayout causes NullPointerException

我不是揮桿布局經理的專業人士,這種行為使我完全困惑。 本質上,如果沒有得到NullPointerException,就無法將JTextArea或JTextPane添加到我的MigLayout中。

我創建了一個擴展JPanel的類:

public ComponentPanel(TestComponent testComponent) {
    setLayout(new MigLayout("", "[]", "[][][][][][]"));

    JLabel lblNewLabel = new JLabel("New label");
    add(lblNewLabel, "cell 0 0");

    JButton button = new JButton("New button");
    add(button, "cell 0 3");

    JButton btnNewButton = new JButton("New button");
    add(btnNewButton, "cell 0 5");
}

這很好。 但是,如果嘗試添加textArea,則在嘗試構建時會引發異常:

public ComponentPanel(TestComponent testComponent) {
    setLayout(new MigLayout("", "[grow]", "[][grow][][][][]"));

    JLabel lblNewLabel = new JLabel("New label");
    add(lblNewLabel, "cell 0 0");

    JTextArea textArea = new JTextArea();
    add(textArea, "cell 0 1,grow");

    JButton button = new JButton("New button");
    add(button, "cell 0 3");

    JButton btnNewButton = new JButton("New button");
    add(btnNewButton, "cell 0 5");
}

我在eclipse中使用Window Designer,所以我假設有些事情使MigLayout構造函數煩人了? 我已經對此打了一段時間,我設法弄清楚的是,添加textArea或textPanes會導致以下異常:

Javax.swing.BoxLayout.preferredLayoutSize(未知源)處的java.lang.NullPointerException javax.swing.JComponent.getPreferredSize(java.awt.Container.getPreferredSize(未知源)處的java.awt.Container.preferredSize(未知源)處的java.lang.NullPointerException javax.swing.JRootPane $ RootLayout.preferredLayoutSize(Unknown Source)處java.awt.Container.getPreferredSize(Unknown Source)處javax.swing.JComponent.getPreferredSize(Unknown Source) net.miginfocom.swing.MigLayout.adjustWindowSize(java.awt.Container.getPreferredSize(Unknown Source)處的java.awt.BorderLayout.preferredLayoutSize(Unknown Source) net.miginfocom.swing.MigLayout.layoutContainer上的Unknown Source)(net.miginfocom.swing.MigLayout.preferredLayoutSize(Unknown Source)上的java.awt.Container.preferredSize(Unknown Source)上的java.awt.Container的Unknown Source)。 javax.swing.JComponent上的getPreferredSize(Unknown Source)。 javax.swing.BoxLayout.checkRequests中的getPreferredSize(Unknown Source)(java.awt.Container.layout中的javax.swing.BoxLayout.layoutContainer(未知源)(java.awt.Container.doLayout中的Unknown Source)(未知源) java.awt.Container.validateTree中的“未知源”(java.awt.Container.validateTree中的java.awt.Container.validateTree(未知源)中的java.awt.Container.validateTree(未知源)中的Unknown Source) )處java.awt.Container.validate(未知源)處java.awt.Component.show(未知源)處java.awt.Component.setVisible(未知源)處Java處java.awt.event.InvocationEvent.dispatch(Unknown Source)處com.soartech.ssim.testbed.gui.TestbedApplication $ 1.run(TestbedApplication.java:25)處的java.awt.Window.setVisible(未知源)。 awt.EventQueue.dispatchEventImpl(未知源)在java.awt.EventQueue.access $ 000(未知源)在java.awt.EventQueue $ 1.run(未知源)在java.awt.EventQueue $ 1.run(未知 Source)java.security.AccessController.doPrivileged(本機方法)java.security.AccessControlContext $ 1.doIntersectionPrivilege(未知源)java.awt.EventQueue.dispatchEvent(未知源)java.awt.EventDispatchThread.pumpOneEventForFilters(未知源) )處java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)處java.awt.EventDispatchThread.pumpEvents(未知源)處java.awt.EventDispatchThread.pumpEvents(未知源)處java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源) java.awt.EventDispatchThread.run(未知源)線程“ AWT-EventQueue-0”中的異常javax.swing.SizeRequirements.calculateTiledPositions(javax.swing.BoxLayout.layoutContainer處的java.lang.NullPointerException(未知源)在java.awt.Container.layout(Unknown Source)在java.awt.Container.doLayout(Unknown Source)在java.awt.Container.validateTree(Unknown Source)在java.awt.Container.validateTree(Unknown Source)在java .awt.Container.va 在java.awt.Container.validateTree的lidateTree(未知源)在java.awt.Window.dispatchEventImpl的java.awt.Container.validate(未知源)在java.awt.Component.dispatchEvent(未知源) java.awt.EventQueue.dispatchEventImpl(未知源)java.awt.EventQueue.access $ 000(java.awt.EventQueue $ 1.run中的未知源)(java.awt.EventQueue $ 1.run中的Unknown Source) (未知源)在java.security.AccessController.doPrivileged(本地方法)在java.security.AccessControlContext $ 1.doIntersectionPrivilege(未知源)在java.security.AccessControlContext $ 1.doIntersectionPrivilege(未知源)在java.awt.EventQueue $ 2。在java.awt.EventQueue處運行(未知源)$ 2。在java.security.AccessController.doPrivileged(本機方法)處運行(未知源)在java.awt.EventQueue處的java.security.AccessControlContext $ 1.doIntersectionPrivilege(未知源)處。 java.awt.EventDispatchThread.pumpOneEventForFilters中的dispatchEvent(未知源)(未知Sou) rce),位於java.awt.EventDispatchThread.pumpEvents(未知源),位於java.awt.EventDispatchThread.pumpEvents(未知源),位於java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源),位於java.awt.EventDispatchThread.pumpEvents(未知源)在java.awt.EventDispatchThread.run(未知源)

使用MigLayout 4.0,您的代碼可以在我的計算機上正常運行。 如果您修復了源附件,則可以深入研究BoxLayout並更好地了解正在發生的事情。

沒有源中的實際行號,我在BoxLayout.preferredLayoutSize()中看到的唯一可能是您的UI設置的是返回空inset的Border 這似乎不太可能,但是您可以嘗試像實驗一樣在文本區域上明確設置邊框。

問題最終是我需要讓SwingUtilities為我創建面板,因為它們是通過編程生成的。

    Runnable doWorkRunnable = new Runnable() {
        public void run() {
            for(TestComponent c : Config.getComponents()){
                frame.getContentPane().add(new ComponentPanel(c));
                frame.getContentPane().add(Box.createRigidArea(new Dimension(5,0)));
            }
        }
    };
SwingUtilities.invokeLater(doWorkRunnable);

現在就位,我可以在我的MigLayout中包括文本區域,而不會出現任何問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM