Thứ Hai, 17 tháng 9, 2018

Java - Thông tin cơ bản về Applet

Một applet là một chương trình Lập trình Java chạy trong một trình duyệt Web. Một applet có thể là một ứng dụng Java đầy đủ chức năng vì nó có toàn bộ Java API theo ý của nó.

Học lập trình Java
Có một số khác biệt quan trọng giữa một applet và một ứng dụng Java độc lập, bao gồm những điều sau đây

Một applet là một lớp Java mở rộng lớp java.applet.Applet.

Phương thức main () không được gọi trên một applet, và một lớp applet sẽ không định nghĩa main ().

Các applet được thiết kế để được nhúng trong một trang HTML.

Khi người dùng xem trang HTML chứa applet, mã cho applet được tải xuống máy của người dùng.

Cần có một JVM để xem một applet. JVM có thể là trình cắm thêm của trình duyệt Web hoặc môi trường thời gian chạy riêng biệt.

JVM trên máy của người dùng tạo ra một cá thể của lớp applet và gọi các phương thức khác nhau trong suốt vòng đời của applet.

Các applet có các quy tắc bảo mật nghiêm ngặt được thực thi bởi trình duyệt Web. Bảo mật của một applet thường được gọi là bảo mật sandbox, so sánh applet với một đứa trẻ đang chơi trong một sandbox với các quy tắc khác nhau phải được tuân theo.

Các lớp khác mà các nhu cầu của applet có thể được tải xuống trong một tệp Java Archive (JAR) duy nhất.

Vòng đời của một Applet

Bốn phương thức trong lớp Applet cung cấp cho bạn khung công tác mà bạn xây dựng bất kỳ applet nghiêm trọng nào

init - Phương thức này dành cho bất kỳ việc khởi tạo nào là cần thiết cho applet của bạn. Nó được gọi sau khi các thẻ param bên trong thẻ applet đã được xử lý.

start - Phương thức này được gọi tự động sau khi trình duyệt gọi phương thức init. Nó cũng được gọi bất cứ khi nào người dùng quay trở lại trang chứa applet sau khi đã chuyển sang các trang khác.

stop - Phương thức này được tự động gọi khi người dùng di chuyển ra khỏi trang mà applet nằm. Do đó, nó có thể được gọi nhiều lần trong cùng một applet.

destroy - Phương thức này chỉ được gọi khi trình duyệt tắt bình thường. Bởi vì các applet có nghĩa là để sống trên một trang HTML, bạn không nên để nguyên tài nguyên sau khi người dùng rời khỏi trang chứa applet.

paint - Được gọi ngay sau phương thức start () và cũng bất cứ khi nào applet cần tự vẽ lại trong trình duyệt. Phương thức paint () thực sự được kế thừa từ java.awt.

Một "Hello, World" Applet

Sau đây là một applet đơn giản có tên HelloWorldApplet.java
import java.applet.*;
import java.awt.*;

public class HelloWorldApplet extends Applet {
   public void paint (Graphics g) {
      g.drawString ("Hello World", 25, 50);
   }
}
Các câu lệnh import này đưa các lớp vào trong phạm vi của lớp applet của chúng ta -

java.applet.Applet

java.awt.Graphics

Nếu không có các câu lệnh import này, trình biên dịch Java sẽ không nhận ra các lớp Applet và Graphics, mà lớp applet đề cập đến.

Lớp Applet

Mỗi applet là một phần mở rộng của lớp java.applet.Applet . Lớp Applet cơ sở cung cấp các phương thức mà một lớp Applet dẫn xuất có thể gọi để lấy thông tin và dịch vụ từ ngữ cảnh trình duyệt.

Những phương pháp này bao gồm các phương pháp sau:

Nhận thông số applet

Nhận vị trí mạng của tệp HTML chứa applet

Nhận vị trí mạng của thư mục lớp applet

In thông báo trạng thái trong trình duyệt

Tìm nạp hình ảnh

Tìm nạp một clip âm thanh

Phát clip âm thanh

Thay đổi kích thước applet

Ngoài ra, lớp Applet cung cấp một giao diện mà trình xem hoặc trình duyệt có được thông tin về applet và kiểm soát việc thực hiện của applet. Người xem có thể -

Yêu cầu thông tin về tác giả, phiên bản và bản quyền của applet

Yêu cầu mô tả các tham số mà applet nhận ra

Khởi tạo applet

Phá hủy applet

Bắt đầu thực thi applet

Dừng thực thi applet

Lớp Applet cung cấp các triển khai mặc định của từng phương thức này. Những triển khai đó có thể bị ghi đèkhi cần thiết.

Ứng dụng "Hello, World" đã hoàn thành. Phương pháp duy nhất được ghi đè là phương pháp vẽ.

Gọi một Applet

Một applet có thể được gọi bằng cách nhúng các chỉ thị trong một tệp HTML và xem tệp thông qua trình xem applet hoặc trình duyệt có hỗ trợ Java.

Thẻ <applet> là cơ sở để nhúng một applet vào một tệp HTML. Sau đây là một ví dụ gọi applet "Hello, World"
<html>
   <title>The Hello, World Applet</title>
   <hr>
   <applet code = "HelloWorldApplet.class" width = "320" height = "120">
      If your browser was Java-enabled, a "Hello, World"
      message would appear here.
   </applet>
   <hr>
</html>
Lưu ý - Bạn có thể tham khảo Thẻ HTML Applet để hiểu thêm về cách gọi applet từ HTML.

Thuộc tính mã của thẻ <applet> là bắt buộc. Nó chỉ định lớp Applet để chạy. Chiều rộng và chiều cao cũng được yêu cầu để xác định kích thước ban đầu của bảng điều khiển trong đó một applet chạy. Chỉ thị applet phải được đóng bằng thẻ </ applet>.

Nếu một applet nhận các tham số, các giá trị có thể được chuyển cho các tham số bằng cách thêm các thẻ <param> giữa <applet> và </ applet>. Trình duyệt bỏ qua văn bản và các thẻ khác giữa các thẻ applet.

Các trình duyệt không hỗ trợ Java không xử lý <applet> và </ applet>. Do đó, bất kỳ thứ gì xuất hiện giữa các thẻ, không liên quan đến applet, đều hiển thị trong các trình duyệt không hỗ trợ Java.

Trình xem hoặc trình duyệt tìm kiếm mã Java đã biên dịch tại vị trí của tài liệu. Để xác định khác, sử dụng thuộc tính codebase của thẻ <applet> như được hiển thị

<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class"
   width = "320" height = "120">

Nếu một applet nằm trong một gói khác với gói mặc định, gói giữ phải được xác định trong thuộc tính mã sử dụng ký tự dấu chấm (.) Để tách các thành phần gói / lớp. Ví dụ

<applet  = "mypackage.subpackage.TestApplet.class" 
   width = "320" height = "120">

Lấy thông số Applet

Ví dụ sau đây minh họa cách làm cho một applet đáp ứng các tham số thiết lập được chỉ định trong tài liệu. Applet này hiển thị một mẫu bàn cờ màu đen và màu thứ hai.

Màu thứ hai và kích thước của mỗi ô vuông có thể được chỉ định làm tham số cho applet trong tài liệu.

CheckerApplet lấy các tham số của nó trong phương thức init (). Nó cũng có thể nhận được các tham số của nó trong phương thức paint (). Tuy nhiên, nhận được các giá trị và lưu các thiết lập một lần ở đầu của applet, thay vì ở mỗi lần làm mới, là thuận tiện và hiệu quả.

Trình xem applet hoặc trình duyệt gọi phương thức init () của mỗi applet nó chạy. Người xem gọi init () một lần, ngay lập tức sau khi tải applet. (Applet.init () được thực hiện để không làm gì cả.) Ghi đè việc triển khai mặc định để chèn mã khởi tạo tùy chỉnh.

Phương thức Applet.getParameter () tìm nạp một tham số cho tên của tham số (giá trị của tham số luôn là một chuỗi). Nếu giá trị là số hoặc dữ liệu không phải ký tự khác, chuỗi phải được phân tích cú pháp.

Sau đây là một bộ xương của CheckerApplet.java
import java.applet.*;
import java.awt.*;

public class CheckerApplet extends Applet {
   int squareSize = 50;   // initialized to default size
   public void init() {}
   private void parseSquareSize (String param) {}
   private Color parseColor (String param) {}
   public void paint (Graphics g) {}
}
Dưới đây là các phương thức init () và parseSquareSize () của CheckerApplet
public void init () {
   String squareSizeParam = getParameter ("squareSize");
   parseSquareSize (squareSizeParam);
   
   String colorParam = getParameter ("color");
   Color fg = parseColor (colorParam);
   
   setBackground (Color.black);
   setForeground (fg);
}

private void parseSquareSize (String param) {
   if (param == null) return;
   try {
      squareSize = Integer.parseInt (param);
   } catch (Exception e) {
      // Let default value remain
   }
}
Applet gọi parseSquareSize () để phân tích cú pháp tham số squareSize. parseSquareSize () gọi phương thức thư viện Integer.parseInt (), phân tích một chuỗi và trả về một số nguyên. Integer.parseInt () ném một ngoại lệ bất cứ khi nào đối số của nó không hợp lệ.

Vì vậy, parseSquareSize () bắt các ngoại lệ, thay vì cho phép applet thất bại trong đầu vào xấu.

Applet gọi parseColor () để phân tích tham số màu thành một giá trị Color. parseColor () thực hiện một chuỗi các so sánh chuỗi để khớp với giá trị tham số với tên của một màu được xác định trước. Bạn cần phải thực hiện các phương thức này để làm cho applet này hoạt động.

Chỉ định tham số Applet

Sau đây là một ví dụ về một tệp HTML với một CheckerApplet được nhúng trong nó. Tệp HTML chỉ định cả hai tham số cho applet bằng thẻ <param>.
<html>
   <title>Checkerboard Applet</title>
   <hr>
   <applet code = "CheckerApplet.class" width = "480" height = "320">
      <param name = "color" value = "blue">
      <param name = "squaresize" value = "30">
   </applet>
   <hr>
</html>
Lưu ý - Các tên tham số không phân biệt chữ hoa chữ thường.

Chuyển đổi ứng dụng thành Applet

Thật dễ dàng để chuyển đổi một ứng dụng Java đồ họa (có nghĩa là, một ứng dụng sử dụng AWT và bạn có thể bắt đầu với trình khởi chạy chương trình Java) vào một applet mà bạn có thể nhúng vào một trang web.

Sau đây là các bước cụ thể để chuyển đổi ứng dụng sang applet.

Tạo một trang HTML có thẻ thích hợp để tải mã applet.

Cung cấp một lớp con của lớp JApplet. Đặt lớp này thành công khai. Nếu không, không thể tải applet.

Loại bỏ phương pháp chính trong ứng dụng. Không xây dựng một khung cửa sổ cho ứng dụng. Ứng dụng của bạn sẽ được hiển thị bên trong trình duyệt.

Di chuyển bất kỳ mã khởi tạo nào từ hàm tạo cửa sổ khung thành phương thức init của applet. Bạn không cần phải xây dựng một cách rõ ràng đối tượng applet. Trình duyệt khởi tạo nó cho bạn và gọi phương thức init.

Xóa cuộc gọi thành setSize; cho các applet, kích thước được thực hiện với các tham số chiều rộng và chiều cao trong tệp HTML.

Xóa cuộc gọi thành setDefaultCloseOperation. Không thể đóng một applet; nó chấm dứt khi trình duyệt thoát.

Nếu ứng dụng gọi setTitle, hãy loại bỏ cuộc gọi đến phương thức. Các applet không thể có các thanh tiêu đề. (Tất nhiên, bạn có thể đặt tiêu đề trang web, sử dụng thẻ tiêu đề HTML.)

Đừng gọi setVisible (true). Applet được hiển thị tự động.

Xử lý sự kiện

Các applet kế thừa một nhóm các phương thức xử lý sự kiện từ lớp Container. Lớp Container định nghĩa một số phương thức, chẳng hạn như processKeyEvent và processMouseEvent, để xử lý các loại sự kiện cụ thể, và sau đó một phương thức catch-all gọi là processEvent.

Để phản ứng với một sự kiện, một applet phải ghi đè lên phương thức cụ thể của sự kiện thích hợp.
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.Applet;
import java.awt.Graphics;

public class ExampleEventHandling extends Applet implements MouseListener {
   StringBuffer strBuffer;

   public void init() {
      addMouseListener(this);
      strBuffer = new StringBuffer();
      addItem("initializing the apple ");
   }

   public void start() {
      addItem("starting the applet ");
   }

   public void stop() {
      addItem("stopping the applet ");
   }

   public void destroy() {
      addItem("unloading the applet");
   }

   void addItem(String word) {
      System.out.println(word);
      strBuffer.append(word);
      repaint();
   }

   public void paint(Graphics g) {
      // Draw a Rectangle around the applet's display area.
      g.drawRect(0, 0, 
      getWidth() - 1,
      getHeight() - 1);

      // display the string inside the rectangle.
      g.drawString(strBuffer.toString(), 10, 20);
   }

   
   public void mouseEntered(MouseEvent event) {
   }
   public void mouseExited(MouseEvent event) {
   }
   public void mousePressed(MouseEvent event) {
   }
   public void mouseReleased(MouseEvent event) {
   }
   public void mouseClicked(MouseEvent event) {
      addItem("mouse clicked! ");
   }
}
Bây giờ, chúng ta hãy gọi applet này như sau:
<html>
   <title>Event Handling</title>
   <hr>
   <applet code = "ExampleEventHandling.class" 
      width = "300" height = "300">
   </applet>
   <hr>
</html>
Ban đầu, applet sẽ hiển thị "khởi tạo applet. Khởi động applet." Sau đó, khi bạn nhấp vào bên trong hình chữ nhật, "nhấp chuột" cũng sẽ được hiển thị.

Hiển thị hình ảnh

Một applet có thể hiển thị hình ảnh của định dạng GIF, JPEG, BMP và các định dạng khác. Để hiển thị một hình ảnh trong applet, bạn sử dụng phương thức drawImage () trong lớp java.awt.Graphics.

Sau đây là ví dụ minh họa tất cả các bước để hiển thị hình ảnh
import java.applet.*;
import java.awt.*;
import java.net.*;

public class ImageDemo extends Applet {
   private Image image;
   private AppletContext context;
   
   public void init() {
      context = this.getAppletContext();
      String imageURL = this.getParameter("image");
      if(imageURL == null) {
         imageURL = "java.jpg";
      }
      try {
         URL url = new URL(this.getDocumentBase(), imageURL);
         image = context.getImage(url);
      } catch (MalformedURLException e) {
         e.printStackTrace();
         // Display in browser status bar
         context.showStatus("Could not load image!");
      }
   }
   
   public void paint(Graphics g) {
      context.showStatus("Displaying image");
      g.drawImage(image, 0, 0, 200, 84, null);
      g.drawString("www.javalicense.com", 35, 100);
   }  
}
Bây giờ, chúng ta hãy gọi applet này như sau:
<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "300" height = "200">
      <param name = "image" value = "java.jpg">
   </applet>
   <hr>
</html>

Phát âm thanh

Một applet có thể chơi một tệp âm thanh được đại diện bởi giao diện AudioClip trong gói java.applet. Giao diện AudioClip có ba phương pháp, bao gồm

public void play () - Phát clip âm thanh một lần, ngay từ đầu.

public void loop () - Làm cho clip âm thanh phát lại liên tục.

public void stop () - Dừng phát đoạn âm thanh.

Để có được một đối tượng AudioClip, bạn phải gọi phương thức getAudioClip () của lớp Applet. Phương thức getAudioClip () trả về ngay lập tức, cho dù URL có phân giải thành tệp âm thanh thực tế hay không. Tệp âm thanh sẽ không được tải xuống cho đến khi một nỗ lực được thực hiện để phát clip âm thanh.

Sau đây là ví dụ minh họa tất cả các bước để phát âm thanh
import java.applet.*;
import java.awt.*;
import java.net.*;

public class AudioDemo extends Applet {
   private AudioClip clip;
   private AppletContext context;
   
   public void init() {
      context = this.getAppletContext();
      String audioURL = this.getParameter("audio");
      if(audioURL == null) {
         audioURL = "default.au";
      }
      try {
         URL url = new URL(this.getDocumentBase(), audioURL);
         clip = context.getAudioClip(url);
      } catch (MalformedURLException e) {
         e.printStackTrace();
         context.showStatus("Could not load audio file!");
      }
   }
   
   public void start() {
      if(clip != null) {
         clip.loop();
      }
   }
   
   public void stop() {
      if(clip != null) {
         clip.stop();
      }
   }
}
Bây giờ, chúng ta hãy gọi applet này như sau:
<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "0" height = "0">
      <param name = "audio" value = "test.wav">
   </applet>
   <hr>
</html>
Bạn có thể sử dụng test.wav trên máy tính của bạn để kiểm tra ví dụ trên.

Không có nhận xét nào:

Đăng nhận xét

Lập trình Java - Ngoại lệ

Một ngoại lệ (hoặc sự kiện đặc biệt) là một vấn đề phát sinh trong quá trình thực hiện chương trình. Khi xảy ra Ngoại lệ , luồng bình thường...