Download the JDK
Search the Tutorials
Hide the TOC
Trail: Deployment
Lesson: Applets
Section: Taking Advantage of the Applet API
Applets
Getting Started with Applets
Importing Classes and Packages for Applets
Defining an Applet Subclass
The Life Cycle of an Applet
Methods for Milestones
Methods for Drawing and Event Handling
Methods for Adding UI Components
What Applets Can and Can't Do
Taking Advantage of the Applet API
Finding and Loading Data Files
Displaying Short Status Strings
Displaying Documents in the Browser
Sending Messages to Other Applets
Playing Sounds
Defining and Using Applet Parameters
Deciding Which Parameters to Support
Writing the Code to Support Parameters
Giving Information about Parameters
Using the APPLET Tag
Practical Considerations When Writing Applets
Security Restrictions
Creating a User Interface
Creating a GUI
Displaying Diagnostics to the Standard Output and Error Streams
Getting System Properties
Threads in Applets
Threads in Applets: Examples
Working with a Server-Side Application
A Simple Network Client Applet
Using a Server to Work Around Security Restrictions
Finishing an Applet
Before You Ship that Applet
The Perfectly Finished Applet
Deploying Applets
General Deployment Considerations
Using the applet Tag
Using the object Tag
Using the embed Tag
Deploying Applets in a Mixed-Browser Environment
Solving Common Applet Problems
Questions and Exercises
Home Page > Deployment > Applets
« Previous • Trail • Next »
Sending Messages to Other Applets

> Applets can find other applets and send messages to them, with the following security restrictions:

> - Many browsers require that the applets originate from the same server.
> - Many browsers further require that the applets originate from the same directory on the server (the same code base).
> - The Java API requires that the applets be running on the same page, in the same browser window.

> > Note: Some browsers let applets invoke methods on other applets — even applets on different pages in the same browser — as long as all of the applets come from the same code base. This method of interapplet communication isn't supported by the Java API, so it's possible that it will not be supported by all browsers.

> An applet can find another applet either by looking it up by name (using the `AppletContext getApplet` method) or by finding all the applets on the page (using the `AppletContext getApplets` method). Both methods, if successful, give the caller one or more `Applet` objects. Once the caller finds an `Applet` object, the caller can invoke methods on the object.

### Finding an Applet by Name: The getApplet Method

> The `getApplet` method looks through all of the applets on the current page to see if one of them has the specified name. If so, `getApplet` returns the applet's `Applet` object.

> By default, an applet has no name. For an applet to have a name, one must be specified in the HTML code that adds the applet to a page. You can specify an applet's name in two ways:

> - By specifying a `NAME` attribute within the applet's `<APPLET>` tag. For example:

>   >     <APPLET CODEBASE=example/ CODE=Sender.class
>   >         WIDTH=450
>   >         HEIGHT=200
>   >         NAME="buddy">
>   >     . . .
>   >     </APPLET>

> - By specifying a `NAME` parameter with a `<PARAM>` tag. For example:

>   >     <APPLET CODEBASE=example/ CODE=Receiver.class
>   >         WIDTH=450
>   >         HEIGHT=50>
>   >     <PARAM NAME="name" value="old pal">
>   >     . . .
>   >     </APPLET>

> > Browser Note: Although at least one browser enabled with Java technology conducts a case-sensitive search, the expected behavior is for the `getApplet` method to perform a case-insensitive search. For example, `getApplet("old pal")` and `getApplet("OLD PAL")` should both find an applet named "Old Pal".

> Below are two applets that illustrate lookup by name. The first, the Sender, looks up the second, the Receiver. When the Sender finds the Receiver, the Sender sends a message to the Receiver by invoking one of the Receiver's methods (passing the Sender's name as an argument). The Receiver reacts to this method call by changing its leftmost text string to "Received message from sender-name!".

> Sample Output

> > Note: If you don't see the applet running above, you need to install Java Plug-in, which happens automatically when you install the Java(TM) SE JRE or JDK. This applet requires JDK 1.4 or later. You can find more information on the Java Plug-in home page.

> > Try this: Click the Send message button of the top applet (the Sender). Some status information will appear in the Sender's window, and the Receiver will confirm (with its own status string) that it received a message, After you've read the Receiver status string, press the Receiver's Clear button to reset the Receiver. In the Sender's text field labeled "Receiver name:," type in `buddy` and press Return. Since "buddy" is the Sender's own name, the Sender will find an applet named buddy but won't send it a message, since it isn't a Receiver instance.

> Here's the `whole Sender program`. The code it uses to look up and communicate with the Receiver is listed below. Code that you can use without change in your own applet is in bold font.

> >     Applet receiver = null;
> >     String receiverName = nameField.getText(); //Get name to search for.
> >     receiver = getAppletContext().getApplet(receiverName);

> The Sender goes on to make sure that the Receiver was found and that it's an instance of the correct class (`Receiver`). If all goes well, the Sender sends a message to the Receiver. (Here's the `Receiver program`.)

> >     if (receiver != null) {
> >         //Use the instanceof operator to make sure the applet
> >         //we found is a Receiver object.
> >         if (!(receiver instanceof Receiver)) {
> >             status.appendText("Found applet named "
> >                               + receiverName + ", "
> >                               + "but it's not a Receiver object.\n");
> >         } else {
> >             status.appendText("Found applet named "
> >                               + receiverName + ".\n"
> >                               + "  Sending message to it.\n");
> >             //Cast the receiver to be a Receiver object
> >             //(instead of just an Applet object) so that the
> >             //compiler will let us call a Receiver method.
> >             ((Receiver)receiver).processRequestFrom(myName);
> >         }
> >     } . . .

> From an applet's point of view, its name is stored in a parameter named `NAME`. It can get the value of the parameter using the `Applet getParameter` method. For example, Sender gets its own name with the following code:

> >     myName = getParameter("NAME");

> For more information on using `getParameter`, see Writing the Code to Support Parameters.

> The example applets in this page perform one-way communication — from the Sender to the Receiver. If you want your receiver to be able to send messages to the sender, then you just need to have the sender give a reference to itself (`this`) to the receiver. For example:

> >     ((Receiver)receiver).startCommunicating(this);

### Finding All the Applets on a Page: The getApplets Method

> The `getApplets` method returns a list (an `Enumeration`, to be precise) of all the applets on the page. For security reasons, many browsers and applet viewers implement `getApplets` so that it returns only those applets that originated from the same host as the applet calling `getApplets`. Here's an applet that simply lists all the applets it can find on this page:

> Sample Output

> > Note: If you don't see the applet running above, you need to install Java Plug-in, which happens automatically when you install the Java(TM) SE JRE or JDK. This applet requires JDK 1.4 or later. You can find more information on the Java Plug-in home page.

> Below are the relevant parts of the method that calls `getApplets`. (Here's the `whole program`.)

> >     public void printApplets() {
> >         //Enumeration will contain all applets on this page (including
> >         //this one) that we can send messages to.
> >         Enumeration e = getAppletContext().getApplets();
> >         . . .
> >         while (e.hasMoreElements()) {
> >             Applet applet = (Applet)e.nextElement();
> >             String info = ((Applet)applet).getAppletInfo();
> >             if (info != null) {
> >                 textArea.appendText("- " + info + "\n");
> >             } else {
> >                 textArea.appendText("- "
> >                                     + applet.getClass().getName()
> >                                     + "\n");
> >             }
> >         }
> >         . . .
> >     }

« Previous • Trail • Next »
Previous page: Displaying Documents in the Browser
Next page: Playing Sounds