201871010114-リ・ヤンソン「オブジェクト指向プログラミング(Java)の」週16学習の概要

------------ ------------復元コンテンツが始まります

プロジェクト

コンテンツ

この作品は、コースに属し

https://www.cnblogs.com/nwnu-daizh/

どこの仕事でこの要件

https://www.cnblogs.com/nwnu-daizh/p/11435127.html

ジョブの学習目標

 

(1)は、Javaアプリケーションパッケージ操作を習得。

(2)スレッドの概念を把握します。

(3)は、スレッドが作成された2つの技術を習得します。

(4)アプリケーションのGUIの研究デザイン。

パートI:教科書の知的内容の要約14.1から14.3

パートII:実験の部

1 、実験目的と要件

(1)マスタのJavaアプリケーションパッケージ操作を、

(2)スレッドの概念を把握します。

(3)は、スレッドが作成された2つの技術を習得します。

2 、実験及びステップ

実験 1: の導入第13章サンプルプログラム、テスト手順やコードのコメント。

試験手順1

リットル  elipse IDE 教科書試運転585 のページサイズ13-1 プログラムの理解を実行した結果と併せて、。

lの  生成別のディレクトリにJARファイルには、さらに、アーカイブが実行され、プログラムがリソースを確認することで、現在のディレクトリからJARファイルから読み込まれません。

Lが  作成できるようにJARのメソッドファイルを、

テストコード:

パッケージの糸; 

インポート java.awtの*。;
 輸入 java.io. * ;
 輸入 java.net。* ;
 インポート java.utilのクラス*。;
 インポート * javax.swingの。; 

/ ** 
 * @version 1.41 2015年6月12日
 * @author ケイHorstmann
  * / 
パブリック クラスResourceTest 
{    
   公共 静的 ボイドメイン(文字列[]引数)
   {   // 設定された画像インタフェースウィンドウ 
      EventQueue.invokeLater(() - > { 
         JFrameのフレーム = 新しい新ResourceTestFrame(); 
         frame.setTitle( "ResourceTest" ); 
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。
         frame.setVisible(真の); 
      }); 
   } 
} 

/ ** 
 * Aフレームロード画像とテキストリソースという。
 * / 
クラス ResourceTestFrameが延びたJFrame 
{ 
   プライベート 静的 最終 int型 DEFAULT_WIDTH = 300 プライベート 静的 最終 int型の DEFAULT_HEIGHT = 300 ; 

   パブリックResourceTestFrame()
   {
      setSize(DEFAULT_WIDTH、DEFAULT_HEIGHT); 
      aboutURLのURL =はgetClass()のgetResource( "about.gif");. // 画像ファイル作成アイコンabout.gif使用 
      画像のimg = 新しい新しいイメージアイコン(aboutURL).getImage(); 
      setIconImage(IMG) ; 

      JTextAreaのにtextArea = 新しい新しい JTextAreaに(); // 空白のテキストボックスを作成 
      するInputStreamストリーム=のgetClass()をgetResourceAsStream( "ABOUT.TXT");. // ファイルABOUT.TXT読んで
      試し =中(スキャナ新新しいスキャナ(ストリームを、 「UTF-8」))
      { 
         一方(in.hasNext())// ファイルは、データラインを読み出すか否かを判断します
            textArea.append(in.nextLine()+ "\ N-" ); 
      } 
      追加(にtextArea); //は、ファイルを追加するには、テキストボックスに読み込ま
   } 
}

結果:

 

 

 クリックしてください:

 

 

 

試験手順2:

elipse IDEにおけるL デバッグの ThreadTest、プログラムの合成結果は、プログラムを理解されよ。

lは、スレッドの概念を把握します。

リットル  によるマスター拡張クラススレッドのスレッドを実装する方法。

使用 Runnableをマスターとのインタフェースの改修プログラム、方法、Runnableインタフェースは、スレッドを作成します。

クラス左側は拡張スレッドは{ 
    公共 ラン()
   { 
       のためには、int型は、 I = 0; I <= 5; I ++ 
       {System.out.printlnは( "あなたは学生です!" );
           してみてください {睡眠(500 ); }
            キャッチ(InterruptedExceptionある電子)
           {するSystem.out.println( "左側のエラー。" );}     
       } 
  } 
} 
クラス右側に延びているスレッド{
     公共 ボイドラン()
    { 
         INTを私は= 0; I <= 5; I ++ 
         {System.out.printlnは( "私は先生です!" );
             試す {睡眠(300 )。}
              キャッチ(InterruptedExceptionある電子)
             {するSystem.out.println( "右側エラー。" );} 
         } 
    } 
} 
パブリック クラスThreadTest 
{ 
     静的左側を左、
     静的右側の右;
     パブリック 静的 ボイドメイン(文字列[]引数)
     {左 = 新しい)(左側。 = 新しいです右手(); 
           left.start(); 
           right.start(); 
     } 
}

Runnableをインターフェース変換プログラムを使用した後

パッケージ线程;
// 线程的接口のRunnable 
クラス左側実装Runnableを{ 
           @Override 
           公共 のボイドの実行()
           { 
               のためにint型は、私は0を= I ++; I <= 5 
               {System.out.printlnは( "あなたは学生です!" );
                   試す {のThread.sleep(500 )。}
                    キャッチ(InterruptedExceptionあるE)
                   {するSystem.out.println( "左側のエラー。" );}     
               } 
          } 
        } 
        クラス右側実装Runnableをは{
             公共 ラン()
            { 
                 のためには、int型は、私は= 0; I <= 5; I ++ 
                 {System.out.printlnは( "私は先生です!" );
                     試す {のThread.sleep(300 )。}
                      キャッチ(InterruptedExceptionある電子)
                     {するSystem.out.println( "右側エラー。" );} 
                 } 
            } 
        } 
        パブリック クラスThreadTest 
        { 
             静的左側を左、
             静的右側の右;
             パブリック 静的 ボイドメイン(文字列[]引数)
             {左 = 新しい)(左側。 = 新しい右側は();
                 新しいスレッド(左).start();
                 新しいスレッド(右).start(); 
                 
             } 
        }

結果:

 

 

 

試験手順3:

L 625のプログラムデバッグ教科書14-1、Elipse環境で14-2 14-3、プログラムの合成結果がプログラムを理解します。

Elipse環境で教科書14-4デバッグL 631プログラムは、プログラムの合成結果は、プログラムを理解します。

二つのプログラム、スレッドと使用法の概念を理解するためのlの比較。

lは両方の技術のスレッドの作成を習得しました。

14-1

package 线程;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * Shows an animated bouncing ball.
 * @version 1.34 2015-06-21
 * @author Cay Horstmann
 */
public class Bounce
{
   public static void main(String[] args)
   {  
      EventQueue.invokeLater(() -> {
         JFrame frame = new BounceFrame();
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setVisible(true);
      });//创建一个GUI界面
   }
}

/**
 * The frame with ball component and buttons.
 */
class BounceFrame extends JFrame
{
   private BallComponent comp;
   public static final int STEPS = 1000;
   public static final int DELAY = 3;

   /*构造包含用于显示弹跳球和启动和关闭按钮*/
   public BounceFrame()
   {
      setTitle("Bounce");
      comp = new BallComponent();
      add(comp, BorderLayout.CENTER);//设置组件在页面的布局为边框布局的中央
      JPanel buttonPanel = new JPanel();
      addButton(buttonPanel, "Start", event -> addBall());//添加按钮到按钮面板中,并为其添加事件监听器addBall方法
      addButton(buttonPanel, "Close", event -> System.exit(0));
      add(buttonPanel, BorderLayout.SOUTH);//
      pack();
   }

   /**
    * Adds a button to a container.
    * @param c the container
    * @param title the button title
    * @param listener the action listener for the button
    */
   public void addButton(Container c, String title, ActionListener listener)
   {
      JButton button = new JButton(title);
      c.add(button);
      button.addActionListener(listener);
   }

   /* 在面板中添加一个弹跳球,使其弹跳1000次。
    */
   public void addBall()
   {
      try
      {
         Ball ball = new Ball();
         comp.add(ball);

         for (int i = 1; i <= STEPS; i++)
         {
            ball.move(comp.getBounds());
            comp.paint(comp.getGraphics());
            Thread.sleep(DELAY);//调用线程当中的Thread.sleep方法。用于暂停当前的线程活动
         }
      }
      catch (InterruptedException e)
      {
      }
   }
}

14-2

package 线程;

import java.awt.geom.*;

/* 在长方形边缘上移动和反弹的球*/
public class Ball
{
   private static final int XSIZE = 15;
   private static final int YSIZE = 15;
   private double x = 0;
   private double y = 0;
   private double dx = 1;
   private double dy = 1;

   // 将球移动到下一个位置,如果球碰到其中一个边,则反转方向
   public void move(Rectangle2D bounds)
   {
      x += dx;
      y += dy;
      if (x < bounds.getMinX())
      {
         x = bounds.getMinX();
         dx = -dx;
      }
      if (x + XSIZE >= bounds.getMaxX())
      {
         x = bounds.getMaxX() - XSIZE;
         dx = -dx;
      }
      if (y < bounds.getMinY())
      {
         y = bounds.getMinY();
         dy = -dy;
      }
      if (y + YSIZE >= bounds.getMaxY())
      {
         y = bounds.getMaxY() - YSIZE;
         dy = -dy;
      }
   }

   //获取球在其当前位置的形状
   public Ellipse2D getShape()
   {
      return new Ellipse2D.Double(x, y, XSIZE, YSIZE);
   }
}

14-3

package 线程;

import java.awt.*;
import java.util.*;
import javax.swing.*;
public class BallComponent extends JPanel
{
   private static final int DEFAULT_WIDTH = 450;
   private static final int DEFAULT_HEIGHT = 350;

   private java.util.List<Ball> balls = new ArrayList<>();
   
  //在面板上添加一个球
   public void add(Ball b)
   {
      balls.add(b);
   }

   public void paintComponent(Graphics g)
   {
      super.paintComponent(g); // erase background
      Graphics2D g2 = (Graphics2D) g;
      for (Ball b : balls)
      {
         g2.fill(b.getShape());
      }
   }
   
   public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }
}

运行结果:

おすすめ

転載: www.cnblogs.com/liyansong0198/p/12040730.html