首页 > 解决方案 > 为什么我的程序在间隔后不显示背景颜色变化?

问题描述

我已经尝试了几个小时来找出我在 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(),这也会有很大帮助,但这纯粹是我猜。我需要一个真实的来源。

标签: javacolors

解决方案


你试过打印c吗?

线程运行的频率高于paint因为即使你调用repaint一百万次,它每帧最多只能绘制一次。睡眠有帮助,但它只会降低竞争条件的风险,而不是消除问题。

您还有一个竞争条件,c可以超过 4 并且标志永远不会切换。尝试使用c >= 4andc <= 0来避免这种情况。根据您的描述,这可能是您的问题。


推荐阅读