------------ ------------復元コンテンツが始まります
プロジェクト |
コンテンツ |
この作品は、コースに属し |
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); } }
运行结果: