Java For循环导致窗口弹出次数超出预期

Java For循环导致窗口弹出次数超出预期,java,for-loop,awt,minesweeper,Java,For Loop,Awt,Minesweeper,我正试图用Java(使用Eclipse,如果出于任何原因这很重要的话)构建“扫雷者”,在构建过程中,我遇到了一个以前从未遇到过的问题 当矿井被压下时应该出现的窗口被打开了。。。很多该窗口仅用于打开一次并提示用户继续或放弃 需要注意的重要事项只有在按下最上面一行按钮上的地雷时,才会发生这种情况。不完全确定这是否重要,但窗口弹出的次数是11次。也没有给出错误代码 下面的代码块适用于用户单击矿井时使用 //These are here just for clarification private in

我正试图用Java(使用Eclipse,如果出于任何原因这很重要的话)构建“扫雷者”,在构建过程中,我遇到了一个以前从未遇到过的问题

当矿井被压下时应该出现的窗口被打开了。。。很多该窗口仅用于打开一次并提示用户继续或放弃

需要注意的重要事项只有在按下最上面一行按钮上的地雷时,才会发生这种情况。不完全确定这是否重要,但窗口弹出的次数是11次。也没有给出错误代码

下面的代码块适用于用户单击矿井时使用

//These are here just for clarification
private int continues = 3;
private Listen l = new Listen();

private class Listen extends MouseAdapter implements ActionListener
{
public void actionPerformed(ActionEvent e) 
        {
            Object source = e.getSource();
            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    if (source == mines[i][j])
                    {
                        //Though probably not optimal, I created mines based around a number referred to as difficulty
                        if (minePlacement[i][j] <= difficulty)
                        {
                            Frame f = new Frame();
                            Label L = new Label("You have " + continues + " continues remaining.");
                            Button B = new Button ("Try Again?");
                            Label La = new Label("You're out of continues...");
                            Button But = new Button("Exit");
                            f.setLayout(new FlowLayout());
                            B.addActionListener(new ActionListener() 
                            {
                                @Override
                                public void actionPerformed(ActionEvent e) 
                                {
                                    f.dispose();
                                }
                            });
                            if (continues <= 0)
                            {
                                f.add(La);
                                f.add(But);

                                /*
                                For clarification,
                                This actionListener is used
                                 solely to do System.exit(0);
                                */
                                But.addActionListener(li);

                                f.setSize(250,125);
                            }
                            else
                            {
                                f.add(L);
                                f.add(B);
                                f.setSize(250,100);
                            }
                            f.setLocationRelativeTo(null);
                            f.setAlwaysOnTop(true);
                            f.setVisible(true);
                            f.setTitle("You Hit A Mine!");
                            continues--;

                        }
//这里只是为了澄清一下
私有int=3;
私有侦听l=新侦听();
私有类Listen扩展MouseAdapter实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
对象源=e.getSource();
对于(int i=0;i<9;i++)
{
对于(int j=0;j<9;j++)
{
if(source==mines[i][j])
{
//虽然可能不是最优的,但我根据一个称为“难度”的数字创建了地雷

如果(i)[j]您似乎在反复地将侦听器添加到相同的按钮。在纸上重新思考此逻辑,然后重新编写此代码。旁注:为什么要创建AWT GUI?此GUI库已过时20多年。好的。我一定会将其编写出来,然后再重新编写。此外,我刚刚尝试更多地使用图形,我想AWT是一个很好的起点。你有什么建议吗?抛弃AWT。更好的方法是使用Swing或更好的JavaFX。好的,我一定会尝试这些方法。除了Oracle和其他Java文档,我还可以在线查找其他建议资源吗?链接到我创建的
for (int i = 0; i < rows; i++)
        {
            int x = (int) ((Math.random() + .1) * 10);
            minePlacement[i][0] = x;
            mines[i][0] = new Button();
            mines[i][0].addMouseListener(l);
            mines[i][0].addActionListener(l);
            add(mines[i][0]);

            for (int j = 0; j < cols; j++)
            {
                int y = (int) ((Math.random() + .1) * 10);
                minePlacement[i][j] = y;

                mines[i][j] = new Button();

                mines[0][j].addMouseListener(l);
                mines[0][j].addActionListener(l);
                mines[i][j].addMouseListener(l);
                mines[i][j].addActionListener(l);

                add(mines[i][j]);
        }