繁体   English   中英

JVM如何在Swing中调用画图?

[英]How does JVM call paint in Swing?

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

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

您可以使用另一个线程来调用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)将从另一个线程重新绘制,所以它不会阻塞您的主线程,因此您的程序可以同时执行其他操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM