一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java多線程編程實現下雪效果

java多線程編程實現下雪效果

2020-03-01 11:29hebedich JAVA教程

這篇文章主要介紹了java多線程編程實現下雪效果的相關資料,需要的朋友可以參考下

沒有直接采用繼承Thread類或者繼承Runnable的接口來實現多線程,而是使用了匿名內部類。

要導入的類:

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

1.定義SowPanel類,繼承JPanel類,這個類有兩個整型數組成員,用來保存雪花起始位置。在構造函數中為數組賦初值;重寫父類的paint()方法;定義一個啟動多線程的startSnow()方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class SnowPanel extends JPanel
{
  //定義整型數組,存儲雪花坐標
  private int[] x=new int[300];
  private int[] y=new int[300];
 
  public SnowPanel()
  {
    //設置背景為黑色
    setBackground(Color.black);
    //用隨機數初始化雪花坐標
    for(int i=0;i<x.length;i++)
    {
      x[i]=(int)(Math.random()*800);
      y[i]=(int)(Math.random()*600);
    }
  }
  
  public void paint(Graphics g)
  {
    //繼承父類畫的方法
    super.paint(g);
    //設置顏色為白色
    g.setColor(Color.white);
    //利用循環畫出多個雪花
    for(int i=0;i<x.length;i++)
    {
      g.drawString("*",x[i],y[i]);
    }
  }
  //定義一個方法啟動多線程,并使用匿名內部類
  public void startSnow()
  {
    new Thread()
    {
      public void run()
      {
        while(true)
        {
          for(int i=0;i<y.length;i++)
          {
            //坐標下移
            y[i]++;
            //檢查是否越界
            if(y[i]==600)
            y[i]=0;
            //重繪
            repaint();
          }
          
           try
           {
            Thread.sleep(10);
           }
             catch (InterruptedException e)
           {
            e.printStackTrace();
           }
        }
      }
    }.start();
  }
}

2.定義ShowFrame類,繼承Jframe 類。在構造方法中設置窗口的顯示屬性,并創建ShowPanel對象,添加到窗口中。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class SnowPanel extends JPanel
{
  //定義整型數組,存儲雪花坐標
  private int[] x=new int[300];
  private int[] y=new int[300];
 
  public SnowPanel()
  {
    //設置背景為黑色
    setBackground(Color.black);
    //用隨機數初始化雪花坐標
    for(int i=0;i<x.length;i++)
    {
      x[i]=(int)(Math.random()*800);
      y[i]=(int)(Math.random()*600);
    }
  }
  
  public void paint(Graphics g)
  {
    //繼承父類畫的方法
    super.paint(g);
    //設置顏色為白色
    g.setColor(Color.white);
    //利用循環畫出多個雪花
    for(int i=0;i<x.length;i++)
    {
      g.drawString("*",x[i],y[i]);
    }
  }
  //定義一個方法啟動多線程,并使用匿名內部類
  public void startSnow()
  {
    new Thread()
    {
      public void run()
      {
        while(true)
        {
          for(int i=0;i<y.length;i++)
          {
            //坐標下移
            y[i]++;
            //檢查是否越界
            if(y[i]==600)
            y[i]=0;
            //重繪
            repaint();
          }
          
          try
          {
            Thread.sleep(10);
          }
            catch (InterruptedException e)
          {
            e.printStackTrace();
          }
        }
      }
    }.start();
  }
}

3.運行效果圖片(此為靜態圖):

java多線程編程實現下雪效果

疑問:發現其他的不改變,繼承Frame、Panel和繼承JFrame、Jpanel的運行效果是不同的,前者顯示的下雪場景總是有閃爍的感覺;后者則沒有閃爍,個人感覺后者效果更好些。

接下來我們來看個例子

這里我們做一個完整的例子來說明線程產生的方式不同而生成的線程的區別:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package debug;
 
import java.io.*;
import java.lang.Thread;
 
 
class MyThread extends Thread{
 public int x = 0;
 
 public void run(){
  System.out.println(++x);
 }
}
 
class R implements Runnable{
 private int x = 0;
 public void run(){
  System.out.println(++x);
 }
}
 
public class Test {
 public static void main(String[] args) throws Exception{
  
  for(int i=0;i<10;i++){
   Thread t = new MyThread();
   t.start();
  }
  Thread.sleep(10000);//讓上面的線程運行完成
  R r = new R();
  for(int i=0;i<10;i++){
   Thread t = new Thread(r);
   t.start();
  }
 }
}

  上面10個線程對象產生的10個線程運行時打印了10次1。下面10個線程對象產生的10個線程運行時打印了1到10。我們把下面的10個線程稱為同一實例(Runnable實例)的多個線程。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91制片厂果冻传媒杨柳作品 | 无码AV免费精品一区二区三区 | 大又大又黄又爽免费毛片 | 媳妇和公公小说 | 天天舔天天干 | 传说之下羊妈挤羊奶网站 | 无码观看AAAAAAAA片 | 丁香婷婷在线视频 | 美女把腿开让我 | 亚洲第一人黄所 | 亚洲精品青青草原avav久久qv | 国产免费一区不卡在线 | 久久亚洲电影www电影网 | 国产日产韩产麻豆1区 | 性做久久久久免费观看 | 国产欧美日韩不卡 | 桃色综合网 | 丝袜性爱 | 青草热久精品视频在线观看 | 国产精品视频免费一区二区三区 | 青草草在线观看 | 四虎成人免费视频 | 色8 | 久久精品久久久久 | 国产主播福利在线观看 | 精品久久久久久影院免费 | 爆操女友| 欧美国产日韩在线播放 | 亚洲国产精品久久无套麻豆 | 欧美视频一区二区三区在线观看 | 国内精品久久久久小说网 | 午夜影院在线免费观看 | xxxx意大利xxxxhd | 忘忧草研究院一二三 | 亚洲美女aⅴ久久久91 | 国产在线影院 | 日本高清免费中文字幕不卡 | 王淑兰李思雨李铁柱乡村小说免费 | 亚州男人的天堂 | 久久99热狠狠色AV蜜臀 | 国产成人精品系列在线观看 |