# 与其他小程序通信

> 原文： [https://docs.oracle.com/javase/tutorial/deployment/applet/iac.html](https://docs.oracle.com/javase/tutorial/deployment/applet/iac.html)

Java 小程序可以使用父网页中的 JavaScript 函数与其他 Java 小程序进行通信。 JavaScript 函数通过从一个 applet 接收消息并调用其他 applet 的方法来实现 applet 之间的通信。有关 Java 代码和 JavaScript 代码之间交互的更多信息，请参阅以下主题：

*   [从小程序调用 JavaScript 代码](../applet/invokingJavaScriptFromApplet.html)
*   [从 JavaScript 代码](../applet/invokingAppletMethodsFromJavaScript.html)调用 Applet 方法

您应该避免使用以下机制来查找其他 applet 并在 applet 之间共享数据：

*   避免使用静态变量在 applet 之间共享数据。
*   不要使用 [`AppletContext`](https://docs.oracle.com/javase/8/docs/api/java/applet/AppletContext.html) 类的`getApplet`和`getApplets`方法来查找其他小程序。这些方法仅查找在 Java Runtime Environment 软件的同一实例中运行的 applet。

小程序必须源自服务器上的同一目录才能相互通信。

接下来显示发件人和接收器小程序。当用户单击按钮以递增计数器时，Sender applet 将调用 JavaScript 函数以向 Receiver applet 发送请求。收到请求后，Receiver 小程序会递增计数器变量并显示变量的值。

<noscript>A browser with JavaScript enabled is required for this page to operate properly.</noscript>

发件人小程序

接收器小程序

* * *

**Note:**  If you don't see the applet running, you need to install at least the [Java SE Development Kit (JDK) 6 update 10](http://www.oracle.com/technetwork/java/javase/downloads/index.html) release.

* * *

* * *

**Note:**  If you don't see the example running, you might need to enable the JavaScript interpreter in your browser so that the Deployment Toolkit script can function properly.

* * *

要启用与其他 applet 的通信，请获取对`netscape.javascript.JSObject`类实例的引用。使用此实例来调用 JavaScript 函数。 [`Sender`](examples/applet_SenderReceiver/src/Sender.java) applet 使用`netscape.javascript.JSObject`类的实例来调用名为`sendMsgToIncrementCounter`的 JavaScript 函数。

```
try {
    JSObject window = JSObject.getWindow(this);
    window.eval("sendMsgToIncrementCounter()");
} catch (JSException jse) {
    // ...
}

```

* * *

**Note:** To compile Java code that has a reference to classes in the `netscape.javascript` package, include `<your JDK path>/jre/lib/plugin.jar` in your classpath. At runtime, the Java Plug-in software automatically makes these classes available to applets.

* * *

编写将从一个 applet 接收请求的 JavaScript 函数，并在网页上调用另一个 applet 的方法。 `sendMsgToIncrementCounter` JavaScript 函数调用 Receiver applet 的`incrementCounter`方法。

```
<script>
    function sendMsgToIncrementCounter() {
        var myReceiver = document.getElementById("receiver");
        myReceiver.incrementCounter();
    } 
<script>

```

请注意，JavaScript 代码使用名称`receiver`来获取对网页上 Receiver applet 的引用。此名称应与部署 Receiver applet 时指定的`id`属性的值相同。

接下来显示 [`Receiver`](examples/applet_SenderReceiver/src/Receiver.java) 小程序的`incrementCounter`方法。

```
public void incrementCounter() {
    ctr++;
    String text = " Current Value Of Counter: "
        + (new Integer(ctr)).toString();
    ctrLbl.setText(text);
}

```

在网页上部署 applet，如以下代码段所示。您可以在 [``AppletPage.html``](examples/dist/applet_SenderReceiver/AppletPage.html)中查看发件人和收件人小程序及相关的 JavaScript 代码。

```
<!-- Sender Applet -->
<script src="https://www.java.com/js/deployJava.js"></script>
<script> 
    var attributes = { code:'Sender.class',
        archive:'examples/dist/applet_SenderReceiver/applet_SenderReceiver.jar',
        width:300, height:50} ;
    var parameters = { permissions:'sandbox' };
    deployJava.runApplet(attributes, parameters, '1.6');
</script>

<!-- Receiver Applet -->
<script> 
    var attributes = { id:'receiver', code:'Receiver.class',
        archive:'examples/dist/applet_SenderReceiver/applet_SenderReceiver.jar',
        width:300, height:50} ;
    var parameters = { permissions:'sandbox' };
    deployJava.runApplet(attributes, parameters, '1.6');
</script>

```

[下载 _ 发送者接收器小程序 _ 示例的源代码](examplesIndex.html#SenderReceiver)以进一步试验。