2011-09-15 59 views
7

我得到這個代碼此錯誤:異常「主要」 java.awt.AWTError:BoxLayout的不能共享

super("Trace Masker"); 
    setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)); 

    label1 = new JLabel("Source directory:"); 
    label2 = new JLabel("Target directory:"); 
    label3 = new JLabel("Defect number:"); 
    label4 = new JLabel("Slice tokens:"); 
    label4.setToolTipText("Seperate multiple tokens with comma"); 

    txtSourceDirectory = new JTextField(30); 
    txtTargetDirectory = new JTextField(30); 
    txtDefectNumber = new JTextField(30); 
    txtSliceTokens = new JTextField(30); 

    btnBrowseSourceDirectory = new JButton("..."); 
    btnBrowseTargetDirectory = new JButton("..."); 
    btnStart = new JButton("Start"); 
    btnCancel = new JButton("Cancel"); 

    pnlLabels = new JPanel(new BoxLayout(pnlLabels, BoxLayout.PAGE_AXIS)); 
    pnlText = new JPanel(new BoxLayout(pnlText, BoxLayout.PAGE_AXIS)); 
    pnlBrowseButtons = new JPanel(new BoxLayout(pnlBrowseButtons, BoxLayout.PAGE_AXIS)); 
    pnlTop = new JPanel(new BoxLayout(pnlTop, BoxLayout.LINE_AXIS)); 
    pnlActionButtons = new JPanel(new FlowLayout(FlowLayout.RIGHT)); 

    pnlLabels.add(label1); 
    pnlLabels.add(label2); 
    pnlLabels.add(label3); 
    pnlLabels.add(label4); 

    pnlText.add(txtSourceDirectory); 
    pnlText.add(txtTargetDirectory); 
    pnlText.add(txtDefectNumber); 
    pnlText.add(txtSliceTokens); 

    pnlBrowseButtons.add(btnBrowseSourceDirectory); 
    pnlBrowseButtons.add(btnBrowseTargetDirectory); 

    pnlTop.add(pnlLabels); 
    pnlTop.add(pnlText); 
    pnlTop.add(pnlBrowseButtons); 

    pnlActionButtons.add(btnStart); 
    pnlActionButtons.add(btnCancel); 

    add(pnlTop); 
    add(pnlActionButtons); 

的錯誤是在這條線:

pnlLabels.add(label1); 

只是爲了檢查這是否與pnlLabels特別相關,我評論了它的所有行。然後,錯誤發生在:

pnlText.add(txtSourceDirectory); 

我已經檢查了其他2個問題在這裏關於這個固定對JFrame的setLayout的聲明: Question1 Question2

回答

12

你的問題來自於以下行(和所有其他線路面色不變):

pnlLabels = new JPanel(new BoxLayout(pnlLabels, BoxLayout.PAGE_AXIS)); 

new BoxLayout(...)被調用時,pnlLabels仍然是null,因爲它尚未分配。做正確的方法是在兩個步驟:

pnlLabels = new JPanel(); 
pnlLabels.setLayout(new BoxLayout(pnlLabels, BoxLayout.PAGE_AXIS); 

問題應該會消失(前提是你做的類似於一個所有其他行代碼)。

+2

1+擊敗我20秒。 :) –

+0

謝謝,這解決了它。 – Yoav