多线程的基本实现

接着上边的内容讲,我们要尝试实现一个能让多个小球同时运行的界面

首先要实现的就是界面的实现,这一步就没有必要讲了。你要是不会,可以去参考我前边的技术文章。

接着new一个BallListener类继承MouseAdapter类,目的是在鼠标点击后画出一个球。

在画球前,我们先考虑一下要怎么实现,我们可以将每个小球的运动作为一个线程,也就是每点击一次鼠标,就会产生一个球,同时产生一个新的线程。但这种方法会产生很多线程,我们有更好的方法。我们可以创建一个数组队列,将球存进数组队列中,然后只需要一个线程来控制数组队列就行了。

我们让BallListerner实现Runnable类接口,并且创建数组队列。

ArrayList<Ball> al=new ArrayList<Ball>();

在mouseClicked()方法中,我们要实例化一个ball类,该类的作用是控制小球的运动。

public void mouseClicked(MouseEvent e){
       if(g==null) 
           g=(Graphics2D)bg.getGraphics();
       x=e.getX();
       y=e.getY();
       //实例化ball类
       Ball ba=new Ball();
       //将小球的初始位置传过去
       ba.setY(x,y,g,bg);
       //将小球添加进数组队列
       al.add(ba);
 }

之后就是写好run()方法了

public void run(){
      //要让小球不断运动,所以要一直循环
      while(true){
          for(int i=0;i<al.size();i++){ 
          //清除小球运动痕迹
          al.get(i).clear();
          //画一个新的小球
          al.get(i).draw();
          //更新小球的新一组位置
           al.get(i).move();
          }
           try {
                Thread.sleep(20);
           } catch (InterruptedException e1) {
                e1.printStackTrace();
           }
      }
}

别忘了在界面类中加入

BallListener bl=new BallListener(this);
Thread th=new Thread(bl);
th.start();

现在我们已经完成了两个类了,只剩下ball类。Ball类需要继承Thread类,通过前边的代码和思路,其实ball类的内容大致出来了。在ball类中,我们要设置球的颜色、球的大小、球的运动方向,

球的运动速度,而这些都是通过随机数来实现。除此之外,我们还要写好clear()、draw()、move()方法,在这些方法中,自然是要用上前边的随机数。思路基本就是加减那些随机数,从而来实现不同球的运动。

在clear()方法中,我们会用到

color=bg.getContentPane().getBackground();

这行代码,这表示获取背景色,其实,想要掩盖已有的小球运动路径,方法就是用背景色画球,当然坐标要稍微处理一下。

一个能让多个小球同时运行的界面差不多就实现了。

最后,我提供了源代码和程序,可以自行下载。

百度云链接:pan.baidu.com/s/1o9O40W 密码:u4mm

我下篇文章会讲小球运动的升级版,我们要实现的是自动产生小球,并且添加一张会动的背景图。届时将有三个线程(包括主线程),因此我还会讲到线程安全,并且为了界面顺畅,会用到双缓存次画布的知识。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值