動作中の Java プログラムがあり、X 秒ごとにディスプレイにオブジェクトを描画したいと考えています。これを行う最善の方法は何ですか?for
ループといくつかのステートメントを使用することを考えていましたsleep
が、これを行うためのより簡単で効率的な方法があるかどうかに興味があります。
ありがとう。
動作中の Java プログラムがあり、X 秒ごとにディスプレイにオブジェクトを描画したいと考えています。これを行う最善の方法は何ですか?for
ループといくつかのステートメントを使用することを考えていましたsleep
が、これを行うためのより簡単で効率的な方法があるかどうかに興味があります。
ありがとう。
最も簡単な方法は、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
ここではScheduledExecutorServiceが役立つかもしれません。Javadoc に使用例が示されています。shutdown
終了したら、メソッドを呼び出すことを忘れないでください。
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();
}
}
}