【发布时间】:2015-11-05 09:36:37
【问题描述】:
我有一个创建新线程的类。
`
public ScreenG(JPanel PanelR)
{
Panel = PanelR;
RenderImage = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
FPS = 25;
Hide = false;
(new Thread()
{
public void run()
{
while(true)
{
if(Hide == false)
{
Timer = System.currentTimeMillis() + (1000/FPS);
if(!DrawRendering)
{
Graphics g = Panel.getGraphics();
g.drawImage(RenderImage, 0, 0, null);
}
DrawRendering = false;
while(System.currentTimeMillis() <= Timer) try { Thread.sleep(1); } catch (InterruptedException e) {Thread.currentThread().interrupt();}
}
}
}
}).start();
}
public void draw(BufferedImage ImageR)
{
DrawRendering = true;
RenderImage = ImageR;
Graphics g = Panel.getGraphics();
g.drawImage(RenderImage, 0, 0, null);
}`
在我的主目录中,我创建了一个 ScreenG 的新实例。这将启动一个新线程,该线程将 bufferedImage 绘制到具有一致 FPS 的 JPanel 上。 然后我主要用我创建的图像调用draw。有时它可以工作,但有时面板上的图像会闪烁。我尝试了一些变化,比如 draw 函数接管了绘图。他们都不工作。我只能减少闪烁。
【问题讨论】:
-
您应该按照 Swing 图形教程使用被动图形。此外,您的代码通过在后台线程中进行关键 Swing 调用完全忽略了 Swing 线程规则。我劝你不要这样做。
-
变量名不应以大写字符开头。遵循任何教科书或教程中演示的 Java 约定。不要自己编造!
标签: java swing jpanel flicker drawimage