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