Java小程序无法正确响应

时间:2014-05-02 13:02:57

标签: java random applet

我正在编写一个小型JAVA小程序。

它获得1到6之间的随机数并打印出来 APPLET屏幕。 我想要做的是..在屏幕上循环50次并打印各种randdom数字。 [每次清除前一个号码]。

在那个循环之后..它在applet上打印任何1个最终随机数..

我的问题是:循环。它打印每个ither上的所有数字,屏幕没有得到 清除。 怎么了?我已经尝试了很多清除applet屏幕的方法,比如绘制矩形或使用clearRect()函数。 什么都行不通。 这是代码。

import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.util.Random;



public class Shapes extends Applet{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    Random r = new Random();
    Dimension d = getSize();
    Font f = new Font("TimesRoman", Font.BOLD, 96);
    public void paint(Graphics g)
    {
        for(int m=0;m<=50;m++){     
                int k = Math.abs((r.nextInt()) % 6) + 1;
                g.setFont(f);
                g.setColor(Color.BLACK);
                g.drawString(String.valueOf(k) , 70, 100);  
                g.setColor(Color.WHITE);
                g.drawRect(0, 0, d.width, d.height);
                try{Thread.sleep(70);}catch(Exception e){}
        }



    }

}

3 个答案:

答案 0 :(得分:1)

问题是,在对象创建时,applet没有大小,所以你必须等待获得applet的维度。例如,在渲染时,如下所示:

public void paint(Graphics g)
{
    d = getSize();
    for(int m=0;m<=50;m++){
        g.clearRect(0, 0, (int) d.getWidth(), (int) d.getHeight());

        int k = Math.abs((r.nextInt()) % 6) + 1;
        g.setFont(f);
        g.setColor(Color.BLACK);
        g.drawString(String.valueOf(k) , 70, 100);
        try{Thread.currentThread().sleep(70);}(Exception e){}
    }
}

答案 1 :(得分:1)

请记住paint(Graphics)在事件派发线程上是,所以睡觉它会冻结整个UI。你需要使用这样的异步重绘:

public void init(){
    Timer t=new Timer(70, new ActionListener(){
        public void actionPerformed(ActionEvent e){repaint();}
    });
    t.setCoalesce(true);
    t.setRepeats(true);
    t.start();
}
public void paint(Graphics g){...}

答案 2 :(得分:1)

public void paint(Graphics g)
{
    // ..

应该是:

public void paint(Graphics g)
{
    super.paint(g); // VERY IMPORTANT! Draw BG and borders etc.  
    // ..