java - 线程 "main"java.awt.AWTError : BoxLayout can't be shared 中的异常

标签 java swing

我在这段代码上遇到了这个错误:

    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

最佳答案

您的问题来自以下行(以及所有其他看起来相同的行):

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

new BoxLayout(...) 被调用时,pnlLabels 仍然是 null 因为它还没有被赋值。正确的做法是分两步:

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

问题应该会消失(前提是您对与该行类似的所有其他代码行执行此操作)。

关于java - 线程 "main"java.awt.AWTError : BoxLayout can't be shared 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7432756/

相关文章:

java - 在准备好的语句中获取列名而不是值

c# - 检查对象不为空后从对象获取属性的最快方法是什么?

java - 在 Swing 面板上绘制多个矩形

java - 如何将 EditText 框输入限制为小数点后两个字符?

java - iText Flying Saucer 如何更改最后一页的背景

java - 如何在Java Swing中创建一个像Windows的Explorer(File)那样的界面?

java - 设置 JSlider 缩略图的大小

java - 在java中解析json字符串: Unexpected character (P) at position 1

java - java中随机图像(d)按钮的确切数量

java - 我怎样才能增加/减少点击事件的窗口大小?