我是 AWT/Swing 编程新手。我尝试绘制图像 100,000 次。 drawImage()
方法的循环在paint()
方法中。我发现 java 调用 paint()
方法的时候很不稳定。它可能在一个程序的运行时间内调用了两次paint()
方法,而其他人可能调用了三次。如果我创建一个执行 repaint()
的按钮,它只会在我每次单击此按钮时调用一次 paint()
。
谁能告诉我何时调用 paint()
方法?我知道系统触发的绘画和应用程序触发的绘画。但我认为它不属于这些情况。
最佳答案
您可以使用另一个线程来调用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)将从另一个线程重新绘制,所以它不会阻塞您的主线程,因此您的程序可以同时做其他事情。
关于java - JVM如何调用Swing中的paint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18773654/