有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

线程“awteventque0”java中的多线程java JFrame异常。util。EmptyStackException,即使堆栈先初始化

我正在创建一个3乘3网格布局面板的数字益智游戏。首先,我随机抽取8个数字并将它们放入堆栈,然后弹出它们的值并将它们设置为按钮文本。应用程序运行正常,但有时会打印出以下错误:线程“AWT-EventQueue-0”java中的异常。util。EmptyStackException 在爪哇。util。堆栈peek(Stack.java:102) 在爪哇。util。堆栈pop(Stack.java:84)

它指向这行代码:按钮[i]。setText(randomStack.pop()+)

我知道这是多线程的问题,但我不明白,请帮助我

    public Frame() {

        JPanel panel = new JPanel();
        Stack<Integer> randomStack = new Stack();

        while(randomStack.size() < 8) {
            int n = new Random().nextInt(8) + 1;

            if(!randomStack.contains(n)) {
                randomStack.push(n);
            }
        }


        panel.setLayout(new GridLayout(3, 3));
        panel.setPreferredSize(new Dimension(200 ,200));
        buttons = new JButton[9];

        for(int i = 0; i < 9; i++) {
            buttons[i] = new JButton();
            buttons[i].setSize(30, 30);
            panel.add(buttons[i]);

        }

        Random random = new Random();
        int n = random.nextInt(10);
        for(int i = 0; i < 9; i++) {
            if(i != n) {
               buttons[i].setText(randomStack.pop() + "");
            }
        }

        add(panel, BorderLayout.NORTH);

    }

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Frame().setVisible(true);
        }
    });
}
}

共 (1) 个答案

  1. # 1 楼答案

    您放入8个元素,然后尝试从堆栈中获取9个元素。 这就是为什么会出现异常。 这与多线程无关,因为代码不会启动任何其他线程。 这个密码呢

    Random random = new Random();
    int n = random.nextInt(10);
    

    可能导致n得到值9,在这种情况下,for循环将迭代9次