星空网 > 软件开发 > Java

初学多线程练习2

此练习没有直接采用继承Thread类或者继承Runnable的接口来实现多线程,而是使用了匿名内部类。

要导入的类:

1 import javax.swing.*;2 import java.awt.*;

1.定义SowPanel类,继承JPanel类,这个类有两个整型数组成员,用来保存雪花起始位置。在构造函数中为数组赋初值;重写父类的paint()方法;定义一个启动多线程的startSnow()方法。

 1 class SnowPanel extends JPanel 2 { 3   //定义整型数组,存储雪花坐标 4   private int[] x=new int[300]; 5   private int[] y=new int[300]; 6  7   public SnowPanel() 8   { 9     //设置背景为黑色10     setBackground(Color.black);11     //用随机数初始化雪花坐标12     for(int i=0;i<x.length;i++)13     {14       x[i]=(int)(Math.random()*800);15       y[i]=(int)(Math.random()*600);16     }17   }18   19   public void paint(Graphics g)20   {21     //继承父类画的方法22     super.paint(g);23     //设置颜色为白色24     g.setColor(Color.white);25     //利用循环画出多个雪花26     for(int i=0;i<x.length;i++)27     {28       g.drawString("*",x[i],y[i]);29     }30   }31   //定义一个方法启动多线程,并使用匿名内部类32   public void startSnow()33   {34     new Thread()35     {36       public void run()37       {38         while(true)39         {40           for(int i=0;i<y.length;i++)41           {42             //坐标下移43             y[i]++;44             //检查是否越界45             if(y[i]==600)46             y[i]=0;47             //重绘48             repaint();49           }50           51           try52            {53             Thread.sleep(10);54            }55             catch (InterruptedException e)56            {57             e.printStackTrace();58            }59         }60       }61     }.start();62   }63 }

2.定义ShowFrame类,继承Jframe 类。在构造方法中设置窗口的显示属性,并创建ShowPanel对象,添加到窗口中。

 1 class SnowPanel extends JPanel 2 { 3   //定义整型数组,存储雪花坐标 4   private int[] x=new int[300]; 5   private int[] y=new int[300]; 6  7   public SnowPanel() 8   { 9     //设置背景为黑色10     setBackground(Color.black);11     //用随机数初始化雪花坐标12     for(int i=0;i<x.length;i++)13     {14       x[i]=(int)(Math.random()*800);15       y[i]=(int)(Math.random()*600);16     }17   }18   19   public void paint(Graphics g)20   {21     //继承父类画的方法22     super.paint(g);23     //设置颜色为白色24     g.setColor(Color.white);25     //利用循环画出多个雪花26     for(int i=0;i<x.length;i++)27     {28       g.drawString("*",x[i],y[i]);29     }30   }31   //定义一个方法启动多线程,并使用匿名内部类32   public void startSnow()33   {34     new Thread()35     {36       public void run()37       {38         while(true)39         {40           for(int i=0;i<y.length;i++)41           {42             //坐标下移43             y[i]++;44             //检查是否越界45             if(y[i]==600)46             y[i]=0;47             //重绘48             repaint();49           }50           51           try52            {53             Thread.sleep(10);54            }55             catch (InterruptedException e)56            {57             e.printStackTrace();58            }59         }60       }61     }.start();62   }63 }

3.运行效果图片(此为静态图):

疑问:发现其他的不改变,继承Frame、Panel和继承JFrame、Jpanel的运行效果是不同的,前者显示的下雪场景总是有闪烁的感觉;后者则没有闪烁,个人感觉后者效果更好些。

初学多线程练习2

 




原标题:初学多线程练习2

关键词:线程

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流