जावा - एप्लेट बेसिक्स

एक appletएक जावा प्रोग्राम है जो वेब ब्राउज़र में चलता है। एक एप्लेट पूरी तरह कार्यात्मक जावा एप्लिकेशन हो सकता है क्योंकि इसके निपटान में संपूर्ण जावा एपीआई है।

एक एप्लेट और एक स्वसंपूर्ण जावा अनुप्रयोग के बीच कुछ महत्वपूर्ण अंतर हैं, जिनमें निम्न शामिल हैं -

  • एक एप्लेट एक जावा क्लास है जो java.applet.Applet क्लास का विस्तार करता है।

  • एक एपलेट पर एक मुख्य () पद्धति को लागू नहीं किया जाता है, और एक एपलेट क्लास मुख्य () को परिभाषित नहीं करेगा।

  • Apple को HTML पृष्ठ के भीतर एम्बेड करने के लिए डिज़ाइन किया गया है।

  • जब कोई उपयोगकर्ता एक HTML पृष्ठ देखता है जिसमें एक एप्लेट होता है, तो एप्लेट के लिए कोड को उपयोगकर्ता की मशीन में डाउनलोड किया जाता है।

  • एप्लेट देखने के लिए एक JVM की आवश्यकता होती है। JVM वेब ब्राउज़र का प्लग-इन या अलग रनटाइम वातावरण हो सकता है।

  • उपयोगकर्ता की मशीन पर JVM एप्लेट वर्ग का एक उदाहरण बनाता है और एप्लेट के जीवनकाल के दौरान विभिन्न तरीकों को आमंत्रित करता है।

  • ऐप्पल के सख्त सुरक्षा नियम हैं जो वेब ब्राउज़र द्वारा लागू किए जाते हैं। एक एप्लेट की सुरक्षा को अक्सर सैंडबॉक्स सुरक्षा के रूप में संदर्भित किया जाता है, ऐपलेट की तुलना सैंडबॉक्स में खेलने वाले बच्चे की तुलना में विभिन्न नियमों के साथ की जानी चाहिए।

  • अन्य कक्षाएं जिन्हें एप्लेट की जरूरत है, उन्हें एकल जावा आर्काइव (JAR) फ़ाइल में डाउनलोड किया जा सकता है।

एक एपलेट का जीवन चक्र

एप्लेट क्लास में चार विधियाँ आपको वह ढांचा प्रदान करती हैं जिस पर आप किसी भी गंभीर एप्लेट का निर्माण करते हैं -

  • init- यह विधि आपके एप्लेट के लिए जो भी आरंभीकरण की आवश्यकता है, उसके लिए है। एप्लेट टैग के अंदर परम टैग को संसाधित करने के बाद इसे कॉल किया जाता है।

  • start- ब्राउज़र द्वारा इनिट विधि को कॉल करने के बाद इस विधि को स्वचालित रूप से कहा जाता है। यह तब भी कहा जाता है जब उपयोगकर्ता पृष्ठ पर वापस आ जाता है जिसमें एप्लेट होता है जो अन्य पृष्ठों पर जाने के बाद होता है।

  • stop- यह विधि स्वचालित रूप से उस समय कहलाती है जब उपयोगकर्ता उस पृष्ठ से हट जाता है जिस पर एप्लेट बैठता है। इसलिए, एक ही एप्लेट में बार-बार कॉल किया जा सकता है।

  • destroy- इस विधि को केवल तब कहा जाता है जब ब्राउज़र सामान्य रूप से बंद हो जाता है। क्योंकि एप्लेट्स एक HTML पृष्ठ पर रहने के लिए हैं, इसलिए उपयोगकर्ता को एप्लेट वाले पृष्ठ को छोड़ने के बाद आमतौर पर संसाधनों को पीछे नहीं छोड़ना चाहिए।

  • paint- प्रारंभ () विधि के तुरंत बाद, और किसी भी समय एप्लेट को ब्राउज़र में स्वयं को फिर से लिखने की आवश्यकता होती है। पेंट () विधि वास्तव में java.awt से विरासत में मिली है।

एक "हैलो, वर्ल्ड" एप्लेट

निम्नलिखित एक सरल एप्लेट है जिसका नाम HelloWorldApplet.java है -

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

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

इन आयात कथनों ने कक्षाओं को हमारे एप्लेट वर्ग के दायरे में ला दिया -

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

उन आयात विवरणों के बिना, जावा कंपाइलर क्लासेस एप्लेट और ग्राफिक्स को मान्यता नहीं देगा, जिसे एप्लेट क्लास संदर्भित करता है।

एप्लेट क्लास

हर एपलेट java.applet.Applet क्लास का एक्सटेंशन है । आधार एप्लेट क्लास उन तरीकों को प्रदान करता है जो एक व्युत्पन्न एप्लेट वर्ग ब्राउजर संदर्भ से जानकारी और सेवाएं प्राप्त करने के लिए कह सकता है।

इन विधियों में निम्नलिखित शामिल हैं -

  • एप्लेट पैरामीटर प्राप्त करें
  • HTML फ़ाइल का नेटवर्क स्थान प्राप्त करें जिसमें एप्लेट है
  • एप्लेट श्रेणी निर्देशिका का नेटवर्क स्थान प्राप्त करें
  • ब्राउज़र में एक स्थिति संदेश प्रिंट करें
  • एक छवि प्राप्त करें
  • एक ऑडियो क्लिप लाएं
  • एक ऑडियो क्लिप चलाएं
  • एप्लेट का आकार बदलें

इसके अतिरिक्त, एप्लेट वर्ग एक इंटरफ़ेस प्रदान करता है जिसके द्वारा दर्शक या ब्राउज़र एप्लेट के बारे में जानकारी प्राप्त करता है और एप्लेट के निष्पादन को नियंत्रित करता है। दर्शक कर सकते हैं -

  • एप्लेट के लेखक, संस्करण और कॉपीराइट के बारे में जानकारी का अनुरोध करें
  • एप्लेट को पहचानने वाले मापदंडों के विवरण का अनुरोध करें
  • एप्लेट शुरू करें
  • एप्लेट को नष्ट करें
  • एप्लेट का निष्पादन शुरू करें
  • एप्लेट के निष्पादन को रोकें

एप्लेट वर्ग इनमें से प्रत्येक विधि का डिफ़ॉल्ट कार्यान्वयन प्रदान करता है। उन कार्यान्वयनों को आवश्यक रूप से ओवरराइड किया जा सकता है।

"हैलो, वर्ल्ड" एप्लेट जैसे ही खड़ा होता है पूरा हो जाता है। ओवरराइड की एकमात्र विधि पेंट विधि है।

एक एप्लेट प्राप्त करना

एक HTML फ़ाइल में निर्देशों को एम्बेड करके और ऐपलेट दर्शक या जावा-सक्षम ब्राउज़र के माध्यम से फ़ाइल को देखने के द्वारा एक एप्लेट मंगवाया जा सकता है।

<एप्लेट> टैग HTML फाइल में एप्लेट को एम्बेड करने का आधार है। निम्नलिखित एक उदाहरण है जो "हैलो, वर्ल्ड" एप्लेट को आमंत्रित करता है -

<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 एप्लेट टैग का उल्लेख कर सकते हैं ।

<एप्लेट> टैग की कोड विशेषता आवश्यक है। यह एप्लेट क्लास को चलाने के लिए निर्दिष्ट करता है। पैनल के प्रारंभिक आकार को निर्दिष्ट करने के लिए चौड़ाई और ऊंचाई भी आवश्यक है जिसमें एक एप्लेट चलता है। एप्लेट निर्देश </ एप्लेट> टैग के साथ बंद होना चाहिए।

यदि कोई एप्लेट पैरामीटर लेता है, तो मानों के लिए मानों को <param> टैग के बीच <applet> और </ applet> जोड़कर पारित किया जा सकता है। ब्राउज़र एप्लेट टैग के बीच पाठ और अन्य टैग को अनदेखा करता है।

गैर-जावा-सक्षम ब्राउज़र <एप्लेट> और </ एप्लेट> को संसाधित नहीं करता है। इसलिए, टैग के बीच दिखाई देने वाली कुछ भी, एप्लेट से संबंधित नहीं, गैर-जावा-सक्षम ब्राउज़र में दिखाई देती है।

दर्शक या ब्राउज़र दस्तावेज़ के स्थान पर संकलित जावा कोड की तलाश करता है। अन्यथा निर्दिष्ट करने के लिए, दिखाए गए अनुसार <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 () विधि में अपने मापदंडों को प्राप्त करता है। यह अपने मापदंडों को पेंट () विधि में भी प्राप्त कर सकता है। हालांकि, मूल्यों को प्राप्त करना और एप्लेट की शुरुआत में एक बार सेटिंग्स को सहेजना, हर ताज़ा करने के बजाय, सुविधाजनक और कुशल है।

एप्लेट व्यूअर या ब्राउजर प्रत्येक एपलेट के इनिट () विधि को चलाता है। दर्शक एपलेट लोड करने के तुरंत बाद एक बार 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 () और निजी 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 () कहता है। parseSquareSize () लाइब्रेरी विधि Integer.parseInt () को कॉल करता है, जो एक स्ट्रिंग को पार्स करता है और एक पूर्णांक देता है। जब भी इसका तर्क अमान्य है, Integer.parseInt () एक अपवाद को फेंक देता है।

इसलिए, एप्सेलेट खराब इनपुट पर विफल होने के बजाय, पार्सेक्वेरीसाइज़ () अपवादों को पकड़ता है।

एप्लेट रंग पैरामीटर को रंग मान में पार्स करने के लिए पार्सकोलर () कहता है। parseColor () एक पूर्वनिर्धारित रंग के नाम के पैरामीटर मान से मेल खाने के लिए स्ट्रिंग तुलनाओं की एक श्रृंखला करता है। इस एप्लेट को बनाने के लिए आपको इन तरीकों को लागू करने की आवश्यकता है।

एप्लेट पैरामीटर निर्दिष्ट करना

निम्न HTML फ़ाइल का एक उदाहरण है, जिसमें एक चेकर एपलेट सन्निहित है। HTML फ़ाइल <पैरामीटर> टैग के माध्यम से एप्लेट के दोनों मापदंडों को निर्दिष्ट करती है।

<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 - पैरामीटर नाम केस संवेदी नहीं हैं।

Applets के लिए आवेदन रूपांतरण

एक ग्राफिकल जावा एप्लिकेशन (जो कि AWT का उपयोग करने वाला एप्लिकेशन है और जिसे आप जावा प्रोग्राम लॉन्चर से शुरू कर सकते हैं) को एक एप्लेट में बदलना आसान है जिसे आप वेब पेज में एम्बेड कर सकते हैं।

एप्लिकेशन को एप्लेट में बदलने के लिए विशिष्ट चरण निम्नलिखित हैं।

  • एप्लेट कोड लोड करने के लिए उपयुक्त टैग के साथ एक HTML पेज बनाएं।

  • JApplet वर्ग के एक उपवर्ग की आपूर्ति करें। इस वर्ग को सार्वजनिक करें। अन्यथा, एप्लेट को लोड नहीं किया जा सकता है।

  • आवेदन में मुख्य विधि को हटा दें। एप्लिकेशन के लिए फ़्रेम विंडो का निर्माण न करें। आपका एप्लिकेशन ब्राउज़र के अंदर प्रदर्शित होगा।

  • एप्लेट की इनिट विधि से फ्रेम विंडो कंस्ट्रक्टर से किसी भी इनिशियलाइज़ेशन कोड को स्थानांतरित करें। आपको एप्लेट ऑब्जेक्ट को स्पष्ट रूप से बनाने की आवश्यकता नहीं है। ब्राउज़र आपके लिए इसे तुरंत चालू करता है और इनिट विधि को कॉल करता है।

  • सेट करने के लिए कॉल निकालें; एप्लेट्स के लिए, HTML फ़ाइल में चौड़ाई और ऊंचाई के मापदंडों के साथ साइज़िंग की जाती है।

  • कॉल को SetDefaultCloseOperation पर निकालें। एक एप्लेट बंद नहीं किया जा सकता है; ब्राउज़र से बाहर निकलने पर यह समाप्त हो जाता है।

  • यदि एप्लिकेशन सेटटाइटल कॉल करता है, तो कॉल को विधि में समाप्त करें। Applets में शीर्षक पट्टियाँ नहीं हो सकतीं। (आप निश्चित रूप से, HTML शीर्षक टैग का उपयोग करके वेब पेज को ही शीर्षक दे सकते हैं।)

  • सेटविजिविस (ट्रू) को न कहें। एप्लेट स्वचालित रूप से प्रदर्शित होता है।

घटना से निपटना

Applets कंटेनर वर्ग से ईवेंट-हैंडलिंग विधियों का एक समूह प्राप्त करते हैं। कंटेनर वर्ग कई प्रकार की प्रक्रियाओं को परिभाषित करता है, जैसे कि processKeyEvent और processMouseEvent, विशेष प्रकार की घटनाओं से निपटने के लिए, और फिर processEvent नामक एक कैच-ऑल विधि।

किसी घटना पर प्रतिक्रिया करने के लिए, एपलेट को उपयुक्त ईवेंट-विशिष्ट विधि को ओवरराइड करना चाहिए।

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 इंटरफ़ेस द्वारा प्रस्तुत एक ऑडियो फ़ाइल चला सकता है। ऑडियोक्लिप इंटरफ़ेस में तीन विधियाँ हैं, जिनमें शामिल हैं -

  • public void play() - शुरू से ही एक बार ऑडियो क्लिप चलाती है।

  • public void loop() - ऑडियो क्लिप को लगातार रिप्ले करने का कारण बनता है।

  • public void stop() - ऑडियो क्लिप बजाते हुए बंद हो जाता है।

एक ऑडियोक्लिप ऑब्जेक्ट प्राप्त करने के लिए, आपको अपलेट क्लास की 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>

आप उपरोक्त उदाहरण का परीक्षण करने के लिए अपने पीसी पर test.wav का उपयोग कर सकते हैं।