1

動作中の Java プログラムがあり、X 秒ごとにディスプレイにオブジェクトを描画したいと考えています。これを行う最善の方法は何ですか?forループといくつかのステートメントを使用することを考えていましたsleepが、これを行うためのより簡単で効率的な方法があるかどうかに興味があります。

ありがとう。

4

3 に答える 3

2

最も簡単な方法は、javax.swing.Timerを使用することです。

Timer timer = new Timer(X, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        // Update the variables you need...
        repaint();
    }
});

timer.setRepeats(true);
timer.setCoalesce(true);
timer.start();

あなたも読んでみたいかもしれません

したがって、 (EDT 内で)while (true) { Thread.sleep(X) }呼び出しを使用してはならない理由を理解できます。Swing

于 2012-09-26T00:53:40.187 に答える
1

ここではScheduledExecutorServiceが役立つかもしれません。Javadoc に使用例が示されています。shutdown終了したら、メソッドを呼び出すことを忘れないでください。

于 2012-09-26T00:54:46.153 に答える
0

Thread を使用すると、XMilSeconds ごとに画面に四角形が描画されます。これは 5 回実行すると停止します。実行速度が遅い場合は xMilSeconds を編集し、停止するまでの実行回数は j > 4 にします。フリーズしますが、修正できません。

int i = 0;
private long xMilSeconds = 300;
private boolean paint;
public boolean running = true;

public void paint(Graphics g)
{
    super.paint(g);
    if(paint)
    {
        for(;i < i+1;)
        {
             g.drawRect(i+49,i+49,i+299,i+99);   
             g.setColor(Color.RED);  
             g.fillRect(i+49,i+49,i+299,i+99); 
        }
        paint = false;
    }
}

public void run()
{
    while(running)
    {
        try
        {
            Thread.sleep(xSeconds);
            paint = true;
            repaint();
            i++;
            j++;
            if(j > 4)
            {
                running = false;
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
于 2012-09-26T00:53:02.850 に答える