【发布时间】:2020-10-29 14:40:01
【问题描述】:
我已经尝试了几个小时来找出我在 java 中的一个简单程序中的错误。我希望在 200 毫秒后显示背景颜色的变化,所以我编写了这个程序,但它没有显示正确的输出。
这是一个很长的程序提前感谢阅读。
public class bgColor extends Applet implements Runnable
{
Thread timer=null;
int c,flag;
public void init()
{
c=0;
setBackground(new Color(255,255,255));
}
public void start()
{
if(timer==null)
{
timer=new Thread(this);
timer.start();
}
}
public void paint(Graphics g)
{
switch(c)
{
case 0:setBackground(Color.white);
break;
case 1:setBackground(Color.blue);
break;
case 2:setBackground(Color.green);
break;
case 3:setBackground(Color.red);
break;
}
if(c==4)
{
flag=0;
}
else if(c==0)
{
flag=1;
}
if(flag==0)
{
c--;
}
else if(flag==1)
{
c++;
}
}
public void stop()
{
timer=null;
}
public void run()
{
if(timer!=null)
{
repaint();
c++;
try
{
Thread.sleep(200);
}
catch(InterruptedException e){}
}
timer=null;
}
}
我基本上设置了一个开关,用于在特定时间间隔后更改背景颜色,但它始终只显示红色。
如果有人可以建议我可以在哪里阅读程序如何逐步运行,就像我认为可能是 init(),然后 start() 然后 run(),然后 paint() 然后 stop(),那也会有很大帮助但这纯粹是我的猜测。我需要一个真实的来源。
【问题讨论】:
-
声明
volatile int c; int flag;这样两个线程可以共享字段。否则,一个线程的更改将不会到达另一个使用过时值的线程。