一个使用双缓冲的java程序问题 150

我写了一个程序,是模拟五星红旗升旗的过程,用了双缓冲,源码如下:importjava.awt.*;importjava.applet.*;publicclassFlage... 我写了一个程序,是模拟五星红旗升旗的过程,用了双缓冲,源码如下:
import java.awt.*;
import java.applet.*;
public class Flag extends Applet implements Runnable{
private Thread athread;
private Graphics bg;
private Image bgImage;
private Star2 star;
private int x1, x2, y1, y2, y3;
private int width, height, rise;
public void init(){
athread = null;
x1 = 550; x2 = x1;
y1 = 50; y2 = 750;
y3 = 450;
width = 300;
height = 200;
rise = 5;
}
public void start(){
if(athread == null){
athread = new Thread(this);
athread.start();
athread.setPriority(10);
}
star = new Star2();
}
public void paint(Graphics g){
g.setColor(Color.black);
g.drawLine(x1, y1, x2, y2);
g.setColor(new Color(238, 45, 28));
star.drawStar(g, x1, y3, width, height);
}
public void update(Graphics g){ // 使用双缓冲
if(bgImage == null){
bgImage = createImage(this.getWidth(), this.getHeight());
bg = bgImage.getGraphics();
}
bg.setColor (this.getBackground());
bg.fillRect (0, 0, this.getSize().width, this.getSize().height);

bg.setColor (this.getForeground());
paint (bg);
g.drawImage (bgImage, 0, 0, this);
}
public void run(){
while(athread != null && y3 >= y1){
repaint();
try{
Thread.sleep(1000);
}catch(InterruptedException e){}
y3 -= rise;
}
}

}

class Star2{ //绘制五星红旗
public void drawStar(Graphics g, int x, int y, int width, int height){
int r1 = 30;
int r0 = (int)(r1 * Math.cos(72 * Math.PI / 180));
int[] xrr0 = new int[10];
int[] yrr0 = new int[10];
int[] xrr =
{
(int)0, (int)(r0 * Math.cos(54 * Math.PI / 180)), (int)(r1 * Math.sin
(72 * Math.PI / 180)), (int)(r0 * Math.cos(18 * Math.PI / 180)),
(int)(r1 * Math.cos(54 * Math.PI / 180)), (int)0, (int)(( - r1) *
Math.cos(54 * Math.PI / 180)), (int)(( - r0) * Math.cos(18 *
Math.PI / 180)), (int)(( - r1) * Math.sin(72 * Math.PI / 180)),
(int)(( - r0) * Math.cos(54 * Math.PI / 180))
};
int[] yrr =
{
(int) - r1, (int)( - r0 * Math.sin(54 * Math.PI / 180)), (int)( - r1 *
Math.cos(72 * Math.PI / 180)), (int)((r0) * Math.sin(18 * Math.PI / 180)),
(int)((r1) * (Math.sin(54 * Math.PI / 180))), (int)(r0),
(int)((r1) * (Math.sin(54 * Math.PI / 180))), (int)((r0) * Math.sin
(18 * Math.PI / 180)), (int)( - r1 * Math.cos(72 * Math.PI / 180)),
(int)( - r0 * Math.sin(54 * Math.PI / 180))
};
for (int i = 0; i < xrr.length; i++){
xrr[i] = xrr[i] + x + 60;
yrr[i] = yrr[i] + y + 60;
}
for (int i = 0; i < xrr0.length; i++){
xrr0[i] = xrr[i] / 3 + x - 95;
yrr0[i] = (int)(yrr[i] / 3 + (2 / 3.0) * y + 15);
}
g.setColor(Color.RED);//因为字数限制,接着上面的程序
g.fillRect(x, y, width, height);
g.setColor(Color.YELLOW);
g.fillPolygon(xrr, yrr, 10);
g.fillPolygon(xrr0, yrr0, 10);
g.copyArea(x + 100, y + 25, 22, 22, 15, 18);
g.copyArea(x + 100, y + 25, 22, 22, 15, 38);
g.copyArea(x + 100, y + 25, 22, 22, 0, 60);
}
}
没用双缓冲时,能升旗,但是闪烁,用了以后,有的时候旗子升起来,大多时候旗不动了,请问这个是怎么回事?
展开
 我来答
百度网友0280302
2007-10-27 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:149万
展开全部
我也学计算机的

可惜还没学到你这来

什么时候我也可以编程哟```

你怎么不用FLASH 呢

哈哈

开玩笑``
sandianke
2007-10-27
知道答主
回答量:16
采纳率:0%
帮助的人:0
展开全部
重新弄,就好了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ch...o@sina.com
2007-10-27 · 超过32用户采纳过TA的回答
知道答主
回答量:238
采纳率:0%
帮助的人:119万
展开全部
看看你这个程序中的线程有没有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式