gpt4 book ai didi

java - 在多线程中使用 awt Paint

转载 作者:行者123 更新时间:2023-12-01 05:53:10 25 4
gpt4 key购买 nike

我有一个学校项目,我想把它献给新年,我提出的项目是一个文本烟花,我使用字符和符号作为爆炸粒子,并不断改变它们的 X 和 Y 位置在 Paint() 内。 我对如何一起使用 Paint 和 Thread 感到困惑。问题是它没有在屏幕上绘画或者线程可能没有启动。 (我真的不能告诉,对不起)。问题是我没有收到任何错误,它只是不起作用:(

我认为代码有点长,感谢您阅读它。

工作原理:当用户单击时,将在鼠标位置启动 Firework 线程,这个 Firework 类有一个绘制循环,用于重新创建增量爆炸。所以基本上,我希望用户创建多个爆炸,这就是我将其设为线程的原因。

这是主要的小程序:

public class TBFireworks extends Applet implements MouseListener
{
public void init()
{
setBackground( Color.black );
addMouseListener( this );
}

public void mouseEntered( MouseEvent e ) { }
public void mouseExited( MouseEvent e ) { }
public void mousePressed( MouseEvent e ) { }
public void mouseReleased( MouseEvent e ) { }
public void mouseClicked( MouseEvent e )
{
new Firework( e.getX(),e.getY(), this);
}
}

和 Firework Thread 类:

class Firework extends Thread
{
Point center = new Point(0,0);
int blastRadius = 10;
Point posIncrement = new Point(0,0);
Applet applet;

public Firework(int positionX, int positionY, Applet apple)
{
center.x = positionX;
center.y = positionY;
applet = apple;
new Thread(this).start();
}

public void run()
{
while(blastRadius > 0)
{
applet.paint(applet.getGraphics());

try {
this.sleep(1000/20);
} catch (InterruptedException e) { ; }
}
}

public void paint(Graphics g)
{
if(blastRadius > 0)
{
Point[] fakeFire = {new Point(20,20),new Point(20,30),new Point(30,20)};
ApplyNextPos(fakeFire,posIncrement);

g.setColor(Color.red);
for(int xaa=1; xaa<5; xaa++) // draw the formation
{
for(int zaa=0;zaa<fakeFire.length;zaa++)
{
fakeFire[zaa] = GetQuadrant(xaa,center,fakeFire[zaa]);
}

for(int yaa=0;yaa<fakeFire.length;yaa++)
{
g.drawString("*",fakeFire[yaa].x,fakeFire[yaa].y);
}
}
posIncrement.incrementPos(5);
blastRadius--;
}
}
}

最佳答案

首先,您似乎没有在 FireWork 线程中使用您的绘制方法,而是调用小程序的绘制方法。

我对 applet 和 AWT 的东西有点熟悉,但如果它是 Swing(我想它没有那么不同),我会建议另一种方法。绘画应该(可以?)仅在 EDT(事件调度线程)中完成。当用户单击时,您将创建一个与 FireWork 类似的对象,并将其添加到列表中。然后你启动一个线程(如果尚未启动,它会在某个面板上不断调用重绘。然后在面板的绘制方法中循环所有烟花的列表并绘制它们。

这也会提高内存效率,因为您只使用一个线程。

关于java - 在多线程中使用 awt Paint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3952696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com