Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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 thread类中未更改圆的状态参数_Java_Multithreading_Java 2d - Fatal编程技术网

Java thread类中未更改圆的状态参数

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&

我试图爆炸并内爆一个圆,但爆炸结束后圆的状态不会改变,所以它可以内爆。我用一根线画这个圆圈。如果我在绘制圆组件的panel类中手动更改状态,则两种方法(分解和内爆)都可以工作。从circle类爆炸完成后,如何将状态更改为内爆

这是分解方法:

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();
        }
}