JVM如何在Swing中调用绘图?

时间:2013-09-12 20:20:36

标签: java swing awt

我是AWT / Swing编程的新手。我尝试绘制图像100,000次。 drawImage()方法的循环采用paint()方法。我发现java调用paint()方法的时间非常不稳定。它可以在一个程序运行时间内调用paint()方法两次,但其他人可能会调用三次。如果我创建了一个repaint()的按钮,则每次单击此按钮时,它只会调用paint()一次。

有人可以告诉我何时调用paint()方法?我知道系统触发的绘画和应用程序触发的绘画。但我认为它不属于任何这些情况。

1 个答案:

答案 0 :(得分:0)

您可以使用另一个线程来调用 repaint()方法。一个简单的方法是使您的绘画类(java.awt.Canvas或此处为javax.swing.JPanel)实现Runnable并在构造函数中启动该Thread。还要添加 run()方法。

import javax.swing.*;

public class DrawPicktures extends JPanel implements Runnable
{
    public DrawPickture()
    {
        /* Code */
        new Thread(this).start();
    }

    public void Paint(Graphics g)
    {
        super.Paint(g); // Will draw all gui components added
        /* Code */
    }

    public void run()
    {
        while(true)
        {
            repaint();
            try
            {
                Thread.sleep(1000  /* Waits for 1000 milliseconds */);
            }
            catch(InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }
}

因为JPanel(或Canvas)将从另一个线程重新绘制,它不会阻塞你的主线程,所以你的程序可以同时做其他的东西。