자바-애플릿 기초

applet웹 브라우저에서 실행되는 Java 프로그램입니다. 애플릿은 전체 Java API를 자유롭게 사용할 수 있기 때문에 완전한 기능의 Java 응용 프로그램이 될 수 있습니다.

다음을 포함하여 애플릿과 독립형 Java 응용 프로그램 사이에는 몇 가지 중요한 차이점이 있습니다.

  • 애플릿은 java.applet.Applet 클래스를 확장하는 Java 클래스입니다.

  • main () 메소드는 애플릿에서 호출되지 않으며 애플릿 클래스는 main ()을 정의하지 않습니다.

  • 애플릿은 HTML 페이지에 포함되도록 설계되었습니다.

  • 사용자가 애플릿이 포함 된 HTML 페이지를 볼 때 애플릿에 대한 코드가 사용자의 컴퓨터로 다운로드됩니다.

  • 애플릿을 보려면 JVM이 필요합니다. JVM은 웹 브라우저의 플러그인이거나 별도의 런타임 환경 일 수 있습니다.

  • 사용자 시스템의 JVM은 애플릿 클래스의 인스턴스를 만들고 애플릿의 수명 동안 다양한 메서드를 호출합니다.

  • 애플릿에는 웹 브라우저에서 적용하는 엄격한 보안 규칙이 있습니다. 애플릿의 보안은 종종 샌드 박스 보안이라고 불리며, 따라야 할 다양한 규칙을 사용하여 애플릿을 샌드 박스에서 놀고있는 아이와 비교합니다.

  • 애플릿에 필요한 다른 클래스는 단일 JAR (Java Archive) 파일로 다운로드 할 수 있습니다.

애플릿의 수명주기

Applet 클래스의 네 가지 메서드는 심각한 애플릿을 구축 할 수있는 프레임 워크를 제공합니다.

  • init−이 방법은 애플릿에 필요한 모든 초기화를위한 것입니다. 애플릿 태그 내부의 param 태그가 처리 된 후에 호출됩니다.

  • start−이 메서드는 브라우저가 init 메서드를 호출 한 후 자동으로 호출됩니다. 사용자가 다른 페이지로 이동 한 후 애플릿이 포함 된 페이지로 돌아올 때마다 호출됩니다.

  • stop−이 메서드는 사용자가 애플릿이있는 페이지를 벗어날 때 자동으로 호출됩니다. 따라서 동일한 애플릿에서 반복적으로 호출 할 수 있습니다.

  • destroy−이 메서드는 브라우저가 정상적으로 종료 될 때만 호출됩니다. 애플릿은 HTML 페이지에 있어야하기 때문에 일반적으로 사용자가 애플릿이 포함 된 페이지를 떠난 후에 리소스를 남겨두면 안됩니다.

  • paint− start () 메서드 직후에 호출되며, 또한 애플릿이 브라우저에서 자체적으로 다시 그려야 할 때마다 호출됩니다. paint () 메소드는 실제로 java.awt에서 상속됩니다.

"Hello, World"애플릿

다음은 HelloWorldApplet.java라는 간단한 애플릿입니다.

import java.applet.*;
import java.awt.*;

public class HelloWorldApplet extends Applet {
   public void paint (Graphics g) {
      g.drawString ("Hello World", 25, 50);
   }
}

이러한 import 문은 클래스를 애플릿 클래스의 범위로 가져옵니다.

  • java.applet.Applet
  • java.awt.Graphics

이러한 import 문이 없으면 Java 컴파일러는 애플릿 클래스가 참조하는 Applet 및 Graphics 클래스를 인식하지 못합니다.

애플릿 클래스

모든 애플릿은 java.applet.Applet 클래스 의 확장입니다 . 기본 Applet 클래스는 파생 된 Applet 클래스가 브라우저 컨텍스트에서 정보와 서비스를 얻기 위해 호출 할 수있는 메서드를 제공합니다.

여기에는 다음을 수행하는 방법이 포함됩니다.

  • 애플릿 매개 변수 가져 오기
  • 애플릿이 포함 된 HTML 파일의 네트워크 위치를 가져옵니다.
  • 애플릿 클래스 디렉토리의 네트워크 위치 얻기
  • 브라우저에서 상태 메시지 인쇄
  • 이미지 가져 오기
  • 오디오 클립 가져 오기
  • 오디오 클립 재생
  • 애플릿 크기 조정

또한 Applet 클래스는 뷰어 또는 브라우저가 애플릿에 대한 정보를 얻고 애플릿의 실행을 제어하는 ​​인터페이스를 제공합니다. 시청자는-

  • 애플릿의 작성자, 버전 및 저작권에 대한 정보 요청
  • 애플릿이 인식하는 매개 변수에 대한 설명 요청
  • 애플릿 초기화
  • 애플릿 파괴
  • 애플릿 실행 시작
  • 애플릿 실행 중지

Applet 클래스는 이러한 각 메서드의 기본 구현을 제공합니다. 이러한 구현은 필요에 따라 재정의 될 수 있습니다.

"Hello, World"애플릿은 그대로 완성되었습니다. 재정의 된 유일한 방법은 paint 방법입니다.

애플릿 호출

HTML 파일에 지시문을 임베드하고 애플릿 뷰어 또는 Java 사용 가능 브라우저를 통해 파일을 보면 애플릿을 호출 할 수 있습니다.

<applet> 태그는 HTML 파일에 애플릿을 포함하기위한 기초입니다. 다음은 "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>

Note− HTML에서 애플릿 을 호출하는 방법에 대한 자세한 내용은 HTML Applet Tag 를 참조 할 수 있습니다 .

<applet> 태그의 코드 속성이 필요합니다. 실행할 Applet 클래스를 지정합니다. 애플릿이 실행되는 패널의 초기 크기를 지정하려면 너비와 높이도 필요합니다. 애플릿 지시문은 </ applet> 태그로 닫아야합니다.

애플릿이 매개 변수를 사용하는 경우 <applet>과 </ applet> 사이에 <param> 태그를 추가하여 매개 변수에 대한 값을 전달할 수 있습니다. 브라우저는 애플릿 태그 사이의 텍스트 및 기타 태그를 무시합니다.

Java를 사용할 수없는 브라우저는 <applet> 및 </ applet>을 처리하지 않습니다. 따라서 애플릿과 관련이없는 태그 사이에 나타나는 모든 것은 자바를 지원하지 않는 브라우저에서 볼 수 있습니다.

뷰어 또는 브라우저는 문서 위치에서 컴파일 된 Java 코드를 찾습니다. 다르게 지정하려면 다음과 같이 <applet> 태그의 코드베이스 속성을 사용하십시오.

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

애플릿이 기본값이 아닌 다른 패키지에있는 경우 패키지 / 클래스 구성 요소를 구분하려면 마침표 문자 (.)를 사용하여 코드 속성에 보관 패키지를 지정해야합니다. 예를 들면-

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

애플릿 매개 변수 얻기

다음 예제는 애플릿이 문서에 지정된 설정 매개 변수에 응답하도록 만드는 방법을 보여줍니다. 이 애플릿은 검정과 두 번째 색상의 바둑판 패턴을 표시합니다.

두 번째 색상과 각 사각형의 크기는 문서 내의 애플릿에 대한 매개 변수로 지정할 수 있습니다.

CheckerApplet은 init () 메서드에서 매개 변수를 가져옵니다. paint () 메서드에서 매개 변수를 가져올 수도 있습니다. 그러나 새로 고칠 때마다 값을 가져오고 애플릿을 시작할 때마다 설정을 저장하는 것이 편리하고 효율적입니다.

애플릿 뷰어 또는 브라우저는 실행되는 각 애플릿의 init () 메서드를 호출합니다. 뷰어는 애플릿을로드 한 직후에 init ()를 한 번 호출합니다. (Applet.init ()는 아무것도하지 않도록 구현됩니다.) 사용자 정의 초기화 코드를 삽입하려면 기본 구현을 재정의합니다.

Applet.getParameter () 메서드는 매개 변수 이름이 지정된 매개 변수를 가져옵니다 (매개 변수 값은 항상 문자열 임). 값이 숫자 또는 기타 비 문자 데이터 인 경우 문자열을 구문 분석해야합니다.

다음은 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) {}
}

다음은 CheckerApplet의 init () 및 private parseSquareSize () 메서드입니다.

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
   }
}

애플릿은 parseSquareSize ()를 호출하여 squareSize 매개 변수를 구문 분석합니다. parseSquareSize ()는 문자열을 구문 분석하고 정수를 반환하는 라이브러리 메서드 Integer.parseInt ()를 호출합니다. Integer.parseInt ()는 인수가 유효하지 않을 때마다 예외를 발생시킵니다.

따라서 parseSquareSize ()는 잘못된 입력에서 애플릿이 실패하도록 허용하는 대신 예외를 포착합니다.

애플릿은 parseColor ()를 호출하여 색상 매개 변수를 색상 값으로 구문 분석합니다. parseColor ()는 매개 변수 값을 미리 정의 된 색상의 이름과 일치시키기 위해 일련의 문자열 비교를 수행합니다. 이 애플릿이 작동하도록하려면 이러한 메소드를 구현해야합니다.

애플릿 매개 변수 지정

다음은 CheckerApplet이 포함 된 HTML 파일의 예입니다. HTML 파일은 <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>

Note − 매개 변수 이름은 대소 문자를 구분하지 않습니다.

애플릿으로 애플리케이션 변환

그래픽 Java 애플리케이션 (즉, AWT를 사용하고 Java 프로그램 실행기로 시작할 수있는 애플리케이션)을 웹 페이지에 임베드 할 수있는 애플릿으로 쉽게 변환 할 수 있습니다.

다음은 응용 프로그램을 애플릿으로 변환하는 특정 단계입니다.

  • 애플릿 코드를로드하기위한 적절한 태그로 HTML 페이지를 만드십시오.

  • JApplet 클래스의 서브 클래스를 제공하십시오. 이 수업을 공개합니다. 그렇지 않으면 애플릿을로드 할 수 없습니다.

  • 응용 프로그램에서 주요 방법을 제거하십시오. 응용 프로그램에 대한 프레임 창을 구성하지 마십시오. 애플리케이션이 브라우저 내에 표시됩니다.

  • 프레임 창 생성자에서 애플릿의 init 메서드로 초기화 코드를 이동합니다. 애플릿 개체를 명시 적으로 구성 할 필요는 없습니다. 브라우저는이를 인스턴스화하고 init 메소드를 호출합니다.

  • setSize에 대한 호출을 제거하십시오. 애플릿의 경우 크기 조정은 HTML 파일의 너비 및 높이 매개 변수로 수행됩니다.

  • setDefaultCloseOperation에 대한 호출을 제거하십시오. 애플릿은 닫을 수 없습니다. 브라우저가 종료되면 종료됩니다.

  • 애플리케이션이 setTitle을 호출하는 경우 메소드에 대한 호출을 제거하십시오. 애플릿은 제목 표시 줄을 가질 수 없습니다. (물론 HTML 제목 태그를 사용하여 웹 페이지 자체의 제목을 지정할 수 있습니다.)

  • setVisible (true)을 호출하지 마십시오. 애플릿이 자동으로 표시됩니다.

이벤트 처리

애플릿은 Container 클래스에서 이벤트 처리 메서드 그룹을 상속합니다. Container 클래스는 특정 유형의 이벤트를 처리하기위한 processKeyEvent 및 processMouseEvent와 같은 여러 메서드와 processEvent라는 하나의 catch-all 메서드를 정의합니다.

이벤트에 반응하려면 애플릿이 적절한 이벤트 별 방법을 재정의해야합니다.

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! ");
   }
}

이제이 애플릿을 다음과 같이 부르겠습니다.

<html>
   <title>Event Handling</title>
   <hr>
   <applet code = "ExampleEventHandling.class" 
      width = "300" height = "300">
   </applet>
   <hr>
</html>

처음에는 애플릿에 "애플릿 초기화 중. 애플릿 시작 중"이 표시됩니다. 그런 다음 사각형 내부를 클릭하면 "마우스 클릭"도 표시됩니다.

이미지 표시

애플릿은 GIF, JPEG, BMP 및 기타 형식의 이미지를 표시 할 수 있습니다. 애플릿 내에 이미지를 표시하려면 java.awt.Graphics 클래스에있는 drawImage () 메서드를 사용합니다.

다음은 이미지를 표시하는 모든 단계를 설명하는 예입니다.

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);
   }  
}

이제이 애플릿을 다음과 같이 부르겠습니다.

<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "300" height = "200">
      <param name = "image" value = "java.jpg">
   </applet>
   <hr>
</html>

오디오 재생

애플릿은 java.applet 패키지의 AudioClip 인터페이스가 나타내는 오디오 파일을 재생할 수 있습니다. AudioClip 인터페이스에는 다음과 같은 세 가지 방법이 있습니다.

  • public void play() − 오디오 클립을 처음부터 한 번 재생합니다.

  • public void loop() − 오디오 클립이 계속 재생되도록합니다.

  • public void stop() − 오디오 클립 재생을 중지합니다.

AudioClip 객체를 얻으려면 Applet 클래스의 getAudioClip () 메서드를 호출해야합니다. getAudioClip () 메서드는 URL이 실제 오디오 파일로 확인되는지 여부에 관계없이 즉시 반환됩니다. 오디오 파일은 오디오 클립 재생을 시도 할 때까지 다운로드되지 않습니다.

다음은 오디오를 재생하는 모든 단계를 보여주는 예입니다.

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();
      }
   }
}

이제이 애플릿을 다음과 같이 부르겠습니다.

<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "0" height = "0">
      <param name = "audio" value = "test.wav">
   </applet>
   <hr>
</html>

PC에서 test.wav를 사용하여 위의 예를 테스트 할 수 있습니다.