免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4498 | 回复: 5
打印 上一主题 下一主题

这段代码到底问题出在哪里?请高手帮忙看看,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-18 02:13 |只看该作者 |倒序浏览
import java.awt.*;
import java.applet.*;
import java.lang.*;

public class menu1 extends Applet implements Runnable
{
Image pic;
Image pic2;
Thread runner;
private boolean running=false;
Graphics signal;
Image offsignal;
int xpos;

public void init()
{
pic = getImage(getCodeBase(),"samba.png");
pic2 = getImage(getCodeBase(), "samba.png");
offsignal = createImage(this.size().width, this.size().height);
signal = offsignal.getGraphics();
}


public void start()
  {
    if (runner==null)
    {
      runner=new Thread(this);
      runner.start();
    }
  }
  
  public void stop()
  {
    if (runner != null)
    {
      runner.stop();
      runner=null;
    }
  }
  
  public void run()
  {
   while(true)
   {
   for (xpos = 148; xpos <= 392; xpos+=4)
   {
    repaint();
    try { Thread.sleep(100); }
    catch (InterruptedException e) { }
   }
    xpos = 148;
   }
  }
  
  public void paint(Graphics g)
{
signal.drawImage(pic, 20, 50,this);
signal.drawImage(pic2, 400,50, this);
signal.setColor(Color.black);
signal.drawLine(148,100,400,100);
signal.setColor(Color.blue);
signal.fillOval(xpos,98,8,8);

g.drawImage(offsignal,0,0,this);

}

  
  public void update(Graphics g)
  {
    paint(g);
  }
  
  public void destroy()
  {
  signal.dispose();
  }

}

本来应该是两副图片之间有一个蓝色的小圆球从一头到另一头,到达另一头以后,再从开端重新出发,就好像两台电脑之前的信息的传输。应该说每一帧画面都会被下一帧画面所替换,但是我的这段程序,做出的来的结果是前一帧的还是留在那里,没有被去掉,结果小圆球就变成了一段不断增长的圆柱,难道最后的signal.dispose()没有起作用?望高手帮我查看一下,这段代码问题出在哪里?谢谢。

论坛徽章:
0
2 [报告]
发表于 2004-08-18 15:35 |只看该作者

这段代码到底问题出在哪里?请高手帮忙看看,谢谢

可以把前一帧用背景色再划一次,再划后一帧的小球

论坛徽章:
0
3 [报告]
发表于 2004-08-19 00:23 |只看该作者

这段代码到底问题出在哪里?请高手帮忙看看,谢谢

问题解决了,我把解决方法贴出来供大家参考
1.在paint函数的最开头加入下面一行代码就ok了

signal.clearRect(0,0,this.getWidth(),this.getHeight());
2.public void paint(Graphics g)
{
//add the two lines
signal.setColor( Color.white );//使用你想要的背景颜色
signal.fillRect(0, 0, this.size().width, this.size().height);

signal.drawImage(pic, 20, 50,this);
signal.drawImage(pic2, 400,50, this);
signal.setColor(Color.black);
signal.drawLine(148,100,400,100);
signal.setColor(Color.blue);
signal.fillOval(xpos,98,8,8);

g.drawImage(offsignal,0,0,this);

}

论坛徽章:
0
4 [报告]
发表于 2004-08-23 15:29 |只看该作者

这段代码到底问题出在哪里?请高手帮忙看看,谢谢

在paint()的方法中加上super.paint()应该也可以。不过没在applet中试过,只在swing中试过是成功的

论坛徽章:
0
5 [报告]
发表于 2004-08-24 10:57 |只看该作者

这段代码到底问题出在哪里?请高手帮忙看看,谢谢

在Thread类里,其stop方法已经弃用了,因为它不安全。用J2SDK1。4应该是不能编译的。

你不会用的JDK1。2以下的版本吧?

论坛徽章:
0
6 [报告]
发表于 2004-08-27 17:25 |只看该作者

这段代码到底问题出在哪里?请高手帮忙看看,谢谢

你 试试在paint()函数中添加
repaint( )函数;Applet中的函数;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP