Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这会冻结我的java程序?_Java_Swing - Fatal编程技术网

为什么这会冻结我的java程序?

为什么这会冻结我的java程序?,java,swing,Java,Swing,我正在为我的科学展项目制作一个魔方模拟器,我遇到了一些麻烦。这段代码应该通过在sideValues[]数组中设置不同的颜色值来使立方体随机化。这并不复杂,但它总是冻结我的电脑。顺便说一句,method1、method2和Method3是JLabel,计数器整数用于确保每种颜色不超过9个,drawAndButtons是立方体显示的JPanel,cubeSpace是JPanel drawAndButtons打开的JPanel method1.setForeground(Color.red);

我正在为我的科学展项目制作一个魔方模拟器,我遇到了一些麻烦。这段代码应该通过在sideValues[]数组中设置不同的颜色值来使立方体随机化。这并不复杂,但它总是冻结我的电脑。顺便说一句,method1、method2和Method3是JLabel,计数器整数用于确保每种颜色不超过9个,drawAndButtons是立方体显示的JPanel,cubeSpace是JPanel drawAndButtons打开的JPanel

method1.setForeground(Color.red);
            method2.setForeground(Color.black);
            method3.setForeground(Color.black);
            for(int h = 1; h <= 54; h++)
            {
                do
                {
                    transfer = generator.nextInt(6) + 1;
                    switch(transfer)
                    {
                        case 1:
                            numy++;
                        case 2:
                            numb++;
                        case 3:
                            numo++;
                        case 4:
                            numg++;
                        case 5:
                            numr++;
                        case 6:
                            numw++;
                        default:
                    }
                    if(numy > 9 || numb > 9 || numo > 9 || numg > 9 || numr > 9 || numw > 9)
                    {
                        rightAmount = false;
                        switch(transfer)
                        {
                            case 1:
                                numy--;
                            case 2:
                                numb--;
                            case 3:
                                numo--;
                            case 4:
                                numg--;
                            case 5:
                                numr--;
                            case 6:
                                numw--;
                            default:
                        }
                    }
                    else
                    {
                        sideValues[h] = transfer;
                        rightAmount = true;
                    }
                }while(rightAmount == false);
            }
            drawAndButtons.add(new graphics());
            cubeSpace.repaint();
            methodValue = 3;
            numy = 0;
            numb = 0;
            numo = 0;
            numg = 0;
            numr = 0;
            numw = 0;
        }

假设一个变量以n numy,numb,numo…开头,大于9,但它在switch中的大小写索引小于current transfer。因此,您不会减少它,do while循环也不会结束。若您的传输恰好大于大于9的值的大小写索引,这可能会导致非常长的循环。请注意,如果您的n个起始变量将被初始化为0,那么这种情况将永远不会发生,例如,如果您将其中任何一个变量的值增加到大于9,那么您的第二个开关会将其减回来。但是在使用该方法之前,您的n个起始变量是如何初始化的?我所说的n开始变量是指numy,numb,numo


更重要的是,由于在您的案例中没有使用break,如果您的transfer=1,您将执行所有案例1、2、3、4、5、6和default,我不确定这是否是您想要在这里执行的。据我所知,您希望增加由伪随机数传输指定的单色块的数量。为此,您必须添加break;在这里的每一个代码中,都只执行case=transfer。

1要更快地获得更好的帮助,请发布一个。2但基于直觉。。不要阻止EDT事件调度线程-发生这种情况时GUI将“冻结”。不要调用Thread.sleepn,而是为重复任务实现一个Swing计时器,或为长时间运行的任务实现一个SwingWorker。更多细节请参见。等等,在所有奇迹解决后添加一个休息时间:为什么你没有休息时间;在您的交换机中?@sᴜʀᴇsʜᴀᴛᴛᴀ 我的双胞胎。。。。。终于找到你了!你必须使用休息;无论如何