2011-09-15 14 views
7

estoy recibiendo este error en el código:Excepción en el hilo "principal" java.awt.AWTError: BoxLayout no puede ser compartida

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); 

El error está en esta línea:

pnlLabels.add(label1); 

Solo para comprobar si esto se relaciona específicamente con pnlLabels, comenté todas sus líneas. El error ocurre entonces en:

pnlText.add(txtSourceDirectory); 

Ya he comprobado los otros 2 preguntas aquí sobre este y se fija la declaración setLayout para el JFrame: Question1 Question2

Respuesta

12

Su problema viene de la línea siguiente (y todas las demás líneas buscando el mismo):

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

Cuando new BoxLayout(...) se llama, pnlLabels sigue siendo null ya que no está asignado todavía. La forma correcta de hacerlo es en dos pasos:

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

El problema debería desaparecer (siempre lo hace para todas las demás líneas de código similar a uno).

+2

1+ venció mi por 20 segundos. :) –

+0

Gracias, esto lo resolvió. – Yoav

Cuestiones relacionadas