线程“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 楼答案
您放入8个元素,然后尝试从堆栈中获取9个元素。 这就是为什么会出现异常。 这与多线程无关,因为代码不会启动任何其他线程。 这个密码呢
可能导致
n
得到值9,在这种情况下,for循环将迭代9次