Java thread类中未更改圆的状态参数
我试图爆炸并内爆一个圆,但爆炸结束后圆的状态不会改变,所以它可以内爆。我用一根线画这个圆圈。如果我在绘制圆组件的panel类中手动更改状态,则两种方法(分解和内爆)都可以工作。从circle类爆炸完成后,如何将状态更改为内爆 这是分解方法:Java thread类中未更改圆的状态参数,java,multithreading,java-2d,Java,Multithreading,Java 2d,我试图爆炸并内爆一个圆,但爆炸结束后圆的状态不会改变,所以它可以内爆。我用一根线画这个圆圈。如果我在绘制圆组件的panel类中手动更改状态,则两种方法(分解和内爆)都可以工作。从circle类爆炸完成后,如何将状态更改为内爆 这是分解方法: public void explode() { double xCenter=thisBall.x+15; double yCenter=thisBall.y+15; if( (thisBall.x&
public void explode()
{
double xCenter=thisBall.x+15;
double yCenter=thisBall.y+15;
if( (thisBall.x>xCenter-40) &&(thisBall.y>yCenter-40)&&(size<80))
{
thisBall.x--;
thisBall.y--;
size+=2;
thisBall.setFrame(thisBall.x,thisBall.y,size,size);
}
else {state=2;}
}
如果一个线程在另一个线程执行
run
方法时更改了state
,则这些更改很可能不可见,因为state
不会再次从内存中提取。将其设置为易失性,然后重试。或者使用AtomicInteger
您对这个圆使用线程是什么意思?内爆和爆炸是否由不同的线程调用?成员变量是否声明为volatile?circle类扩展了thread,我想手动设置explode的状态,在完成explode后,我想让线程内爆圆。没有多个线程。
public void implode()
{
double xCenter=thisBall.x+40;
double yCenter=thisBall.y+40;
if((thisBall.x<xCenter) &&(thisBall.y<yCenter)&&(size>0))
{
thisBall.x++;
thisBall.y++;
size-=2;
thisBall.setFrame(thisBall.x,thisBall.y,size+1,size+1);
}
else{state=3; }
public void run()
{ while(state==1)
{
try {
Thread.sleep(40);
}
catch (InterruptedException e)
{ System.out.println("Thread Halted");}
explode();
controller.repaint(); // this is the panel where i draw the circle
}
while(state==2){
try {
Thread.sleep(40);
}
catch (InterruptedException e)
{ System.out.println("Thread Halted");}
implode();
controller.repaint();
}
}