Java Swing选项卡式窗格添加选项卡异常

哈兹

我有一个Java swing应用程序,它创建并显示一个选项卡式窗格并创建一个更新线程。触发更新线程时,需要添加一组包含内容的选项卡,但是我一次又一次地遇到异常“线程“ AWT-EventQueue-0”中的异常java.lang.ArrayIndexOutOfBoundsException”。

这与在其他线程中添加选项卡有关吗?如果是这样,我如何以线程安全的方式向其添加标签??

这是一个说明问题的示例应用程序

public class Example extends JFrame implements Runnable {

    private final JTabbedPane tabbedPane;
    private final Rectangle bounds;

    public Example() {
        super("Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        bounds = new Rectangle(0, 0, 500, 500);
        setBounds(bounds);
        setLayout(null);

        tabbedPane = new JTabbedPane();
        tabbedPane.setBounds(bounds);

        JPanel jp = new JPanel();
        jp.setLayout(null);
        jp.setBounds(bounds);
        jp.add(tabbedPane);
        add(jp);

        new Thread(this).start();
    }

    @Override
    public void run() {
        while (true) {
            for (int i = 0; i < 3; i++) {
                tabbedPane.addTab("NEW" + i, new JPanel());
                repaint();
            }

            try {
                Thread.sleep(50);
            } catch (InterruptedException ex) {
                Logger.getLogger(Example.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public static void main(String[] args) {
        Example e = new Example();
        e.setVisible(true);
    }
}
疯狂程序员

秋千不是线程安全的...

这意味着您永远不要尝试从事件调度线程的上下文外部创建或修改UI。

可能的问题是您遇到了某种竞赛状况。查看Swing中的并发性以及如何使用Swing计时器以了解更多详细信息

import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.Timer;

public class Example extends JFrame {

    private final JTabbedPane tabbedPane;
    private final Rectangle bounds;

    public Example() {
        super("Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        bounds = new Rectangle(0, 0, 500, 500);
        setBounds(bounds);
//      setLayout(null);

        tabbedPane = new JTabbedPane();
        tabbedPane.setBounds(bounds);

//      JPanel jp = new JPanel();
//      jp.setLayout(null);
//      jp.setBounds(bounds);
//      jp.add(tabbedPane);
//      add(jp);

        add(tabbedPane);

        Timer timer = new Timer(50, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                for (int i = 0; i < 3; i++) {
                    tabbedPane.addTab("NEW" + tabbedPane.getTabCount(), new JPanel());
                }
                tabbedPane.revalidate();
            }
        });
        timer.start();
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                Example e = new Example();
                e.setVisible(true);
            }
        });
    }
}

避免使用null布局,像素完美布局是现代ui设计中的一种幻觉。有太多因素会影响组件的单个大小,您无法控制。Swing旨在与布局经理为核心一起工作,舍弃这些问题不会导致问题和问题的终结,您将花费越来越多的时间来尝试纠正问题

看一下在容器布置组件的更多详细信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

添加选项卡替换选项卡(Java)

来自分类Dev

添加选项卡替换选项卡(Java)

来自分类Dev

尝试在ExtJS的选项卡式窗格中添加选项卡式窗格

来自分类Dev

尝试使用Java Swing获取显示的选项卡

来自分类Dev

JavaFX选项卡式窗格,每个选项卡上都有表格视图?

来自分类Dev

JList作为Java中的选项卡

来自分类Dev

Java JTextpane选项卡大小

来自分类Dev

Java JTextpane选项卡大小

来自分类Dev

Java字符串选项卡

来自分类Dev

转到另一个选项卡时,选项卡式android应用程序崩溃(android-> java-> android studio)

来自分类Dev

JAVA Swing-来自另一个卡面板的卡面板上的选项卡式面板setSelectedIndex()

来自分类Dev

如何在Java swing的选项卡式窗口内插入文本框或任何其他组件?

来自分类Dev

在所有 Firefox 选项卡中禁用 Java Script,但当前选项卡除外

来自分类Dev

从面板切换到选项卡式窗格

来自分类Dev

Jbutton定位在选项卡式窗格内

来自分类Dev

向选项卡添加按钮和可滚动面板-Java

来自分类Dev

递归深度-Java中的选项卡和凹痕

来自分类Dev

NetBeans Java GUI项目-缺少“设计”选项卡

来自分类Dev

使用Java从相同的FXML构建单独的选项卡

来自分类Dev

在处理中的.java选项卡中导入库

来自分类Dev

具有Java脚本的HTML选项卡

来自分类Dev

无法在 Selenium Java 中找到选项卡元素

来自分类Dev

将添加选项卡添加到TemplateRole

来自分类Dev

如何扩展JTabbedPane使其始终具有“添加选项卡”选项卡?

来自分类Dev

在项目/设置选项卡中添加选项卡[Redmine]

来自分类Dev

Java构建路径,“库”选项卡和“订购并导出”选项卡之间的区别

来自分类Dev

在选项卡式查看模式下,如何在QMdiArea的选项卡旁边添加“新选项卡”按钮?

来自分类Dev

在选项卡式查看模式下,如何在QMdiArea的选项卡旁边添加“新选项卡”按钮?

来自分类Dev

动态添加选项卡,单击按钮

Related 相关文章

  1. 1

    添加选项卡替换选项卡(Java)

  2. 2

    添加选项卡替换选项卡(Java)

  3. 3

    尝试在ExtJS的选项卡式窗格中添加选项卡式窗格

  4. 4

    尝试使用Java Swing获取显示的选项卡

  5. 5

    JavaFX选项卡式窗格,每个选项卡上都有表格视图?

  6. 6

    JList作为Java中的选项卡

  7. 7

    Java JTextpane选项卡大小

  8. 8

    Java JTextpane选项卡大小

  9. 9

    Java字符串选项卡

  10. 10

    转到另一个选项卡时,选项卡式android应用程序崩溃(android-> java-> android studio)

  11. 11

    JAVA Swing-来自另一个卡面板的卡面板上的选项卡式面板setSelectedIndex()

  12. 12

    如何在Java swing的选项卡式窗口内插入文本框或任何其他组件?

  13. 13

    在所有 Firefox 选项卡中禁用 Java Script,但当前选项卡除外

  14. 14

    从面板切换到选项卡式窗格

  15. 15

    Jbutton定位在选项卡式窗格内

  16. 16

    向选项卡添加按钮和可滚动面板-Java

  17. 17

    递归深度-Java中的选项卡和凹痕

  18. 18

    NetBeans Java GUI项目-缺少“设计”选项卡

  19. 19

    使用Java从相同的FXML构建单独的选项卡

  20. 20

    在处理中的.java选项卡中导入库

  21. 21

    具有Java脚本的HTML选项卡

  22. 22

    无法在 Selenium Java 中找到选项卡元素

  23. 23

    将添加选项卡添加到TemplateRole

  24. 24

    如何扩展JTabbedPane使其始终具有“添加选项卡”选项卡?

  25. 25

    在项目/设置选项卡中添加选项卡[Redmine]

  26. 26

    Java构建路径,“库”选项卡和“订购并导出”选项卡之间的区别

  27. 27

    在选项卡式查看模式下,如何在QMdiArea的选项卡旁边添加“新选项卡”按钮?

  28. 28

    在选项卡式查看模式下,如何在QMdiArea的选项卡旁边添加“新选项卡”按钮?

  29. 29

    动态添加选项卡,单击按钮

热门标签

归档