2

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

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

4

1 回答 1

0

您可以使用另一个线程来调用repaint()方法。一个简单的方法是让您的绘画类(java.awt.Canvas 或这里的 javax.swing.JPanel)实现 Runnable 并在构造函数中启动该线程。还要添加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)将从另一个线程重新绘制,所以它不会阻塞您的主线程,因此您的程序可以同时执行其他操作。

于 2013-12-02T17:33:15.720 回答