Java Applet TutorialsFree and quality Java programming tutorials, articles, guides, code examples, sample projects and best practiceshttps://codejava.net/java-se/applet2024-05-04T01:35:55-05:00Joomla! - Open Source Content ManagementHow to sign a Java applet2012-12-04T08:29:16-06:002012-12-04T08:29:16-06:00https://codejava.net/java-se/applet/how-to-sign-a-java-appletNam Ha Minhhainatu@gmail.com<div class="feed-description"><p>This tutorial explains necessary steps to sign a Java applet, either by using a self-signed certificate (self-signing) or by using a trusted certificate issued by a certificate authority like VeriSign or Thawte. Signing a Java applet is not difficult task, and it should be done correctly. First, let’s take a look why sometimes we need to have a Java applet signed.</p> <p>&nbsp;</p> <h2>1. Why need to sign Java applet?</h2> <p>When running inside web browser, Java applets are living in a restricted environment so called “sandbox” – which prevents the applets from accessing system resources and devices such as files, network connections, printers, cameras, microphones, etc – without user-granted permission. This tight security is designed to make users safe from malicious code which always tries to execute automatically without user’s intervention.</p> <p>The following picture illustrates how such restriction is applied for unsigned applet and signed applet within the sandbox:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/java%20applet%20sandbox.png" alt="java applet sandbox" width="360" height="378" /></p> <p>To access system resources and devices, the applet must be signed with a digital certificate which is issued by a trusted Certificate Authority (CA). Thus the user can trust this applet and grant permission.</p> <p>For example, you are developing applets that read/write files system, capture video from camera, or record audio from microphone… then you must sign your applets, definitely.</p> <p>Though there is another way to grant permission for applets through the usage of <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">.java.policy&nbsp;</span>file, but this method is for development only. It’s not suitable for deploying applets on production environment because it requires the user manually put the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">.java.policy&nbsp;</span>file on their computer. Thus signing the applet is the convenient way.</p> <p>&nbsp;</p> <h2>2. A Sample applet for signing</h2> <p>To illustrate the process of signing an applet, this tutorial will work with a sample Java applet that shows an open dialog for browsing files on user’s computer. Here is code of the applet:</p> <pre class="brush:java;toolbar:false">package net.codejava.applet; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FileBrowseApplet extends JApplet { private JButton button = new JButton("Browse"); public void init() { getContentPane().setLayout(new FlowLayout()); getContentPane().add(button); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { JFileChooser fileChooser = new JFileChooser(); fileChooser.showOpenDialog(FileBrowseApplet.this); } }); } } </pre> <p>&nbsp;And here is the HTML page that shows the applet:</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt;&lt;title&gt;File Browse Applet Demo&lt;/title&gt;&lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;applet id="FileApplet" code = "net.codejava.applet.FileBrowseApplet.class" archive="FileApplet.jar" width="200" height="60"&gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;/html&gt; </pre> <p>&nbsp;Opening the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">FileApplet.html</span> will show up the applet as following screenshot:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/file%20browse%20applet%20in%20browser.png" alt="file browse applet in browser" width="400" height="179" /></p> <p>When hitting the <strong>Browse</strong> button, an exception of type <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">java.security.AccessControlException</span> is thrown:</p> <p>&nbsp;<img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/java%20console%20error.png" alt="java console error" width="580" height="374" /></p> <p>It is because the open dialog needs permission to access file system resources, but an unsigned applet is denied this permission by default. So, to overcome this, the applet must be signed.</p> <p>&nbsp;</p> <h2>3. Requirement to sign Java applet</h2> <p>Before signing an applet, it requires packaging all applet classes into a single jar file. This can be done by using <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">jar</span> tool which comes with JDK. For example:</p> <p style="text-align: center;" align="center"><span style="color: #800000;"><strong><span style="font-family: 'Courier New';">jar cfv FileApplet.jar net</span></strong></span></p> <p>That will add all classes under package <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">net.codejava</span> into <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">FileApplet.jar</span> file.</p> <p>And two programs are required:</p> <ul> <li style="list-style-type: none;"> <ul> <li><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">keytool.exe</span>: A key and certificate management tool. We use this tool for generating a RSA public/private key pair associates with a certificate - called self-signed certificate, or reading a trusted certificate.</li> <li><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">jarsigner.exe</span>: A signing tool that creates a digital signature of a jar file using a provided certificate.</li> </ul> </li> </ul> <p>These tools come with JDK and are installed under <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JDK_HOME\bin</span> directory.</p> <p>The following diagram illustrates the signing process:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/signing%20process.png" alt="signing process" width="640" height="351" /></p> <p>Now, let’s dive into the signing process using two types of certificate: self-signed certificate and trusted certificate.</p> <p>&nbsp;</p> <h2>4. Sign a Java applet using self-signed certificate</h2> <p>A certificate which is created and signed by a same entity is called self-signed certificate. This self-signing method is simple and quick because we can use our own certificate which is generated by the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">keytool</span> program; don’t have to spend time on requesting and obtaining certificate from a certificate authority; and it does not cost any bucks. However, its drawback is that the user may not accept the certificate since it is not trusted by any public authority. So this method is suitable for development and testing purpose only.</p> <p>Syntax of the command to generate a self-signed certificate is as follows:</p> <p><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">keytool -genkey -alias </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;alias&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -keystore </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;filename&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -keypass </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;keypass&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -dname </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;dname&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -storepass </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;storepass&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -validity </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;days&gt;</em></span></span></p> <p><span style="color: #800000;"><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"></span></span>Where:</p> <ul> <li style="list-style-type: none;"> <ul> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;alias&gt;</span></em></span>: a unique identifier of the certificate. Note that alias is case-insensitive.</li> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;filename&gt;</span></em></span>: name of the file which stores the certificate.</li> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;keypass&gt;</span></em></span>: password to protects the key pair.</li> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;dname&gt;</span></em></span>: distinguished name of the certificate.</li> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;storepass&gt;</span></em></span>: password of the certificate store.</li> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;days&gt;</span></em></span>: number of days after which the certificate will expire.</li> </ul> </li> </ul> <p>For example, the following command generates a self-signed certificate called “<em>myAlias</em>” and stores it in a file named as “<em>myCert</em>”:</p> <p><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">keytool -genkey -alias myAlias -keystore myCert -keypass myKeyPass -dname "CN=FileApplet" -storepass myStorePass -validity 1825</span></strong></span></p> <p>The <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">–validity</span><span style="font-size: 10pt; line-height: 115%;"> </span>parameter specifies that this certificate will expire after 5 years (1825=5x365).</p> <p>Now we use the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">jarsigner</span> tool to sign the applet’s jar file. Syntax of this command is as follows:</p> <p><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">jarsigner -keystore </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;keystore_file&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -keypass </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;keypass&gt;</em></span><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> </span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">-storepass </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;storepass&gt;</em></span><em><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> &lt;jar_file&gt; &lt;alias&gt;</span></em></span></p> <p>For example, the following command signs the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">FileApplet.jar</span> using the self-signed certificate stored in the file <span style="color: #800000;"><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">myCert</span>:</span></p> <p><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">jarsigner -keystore myCert -keypass myKeyPass -storepass myStorePass FileApplet.jar myAlias</span></strong></span></p> <p><span style="color: #800000;"></span>The <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">jarsigner</span> tool signs the applet by creating digital signature for all classes of the applet and put it into <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">META-INF</span> directory inside the jar file.</p> <p>Run the applet again by refreshing the browser, this time a <i>Security Warning</i> dialog shows up:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/run%20self-signed%20applet%20warning.png" alt="run self-signed applet warning" width="500" height="320" /></p> <p>Note that the <i>Publisher</i> field is set to UNKNOWN because this certificate is self-signed.</p> <p>Click <strong>More Information</strong>, then <strong>Certificate Details…</strong> to see information about the certificate, like the following screenshot:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/self-signed%20certificate%20information.png" alt="self-signed certificate information" width="700" height="289" /></p> <p>To grant permission for the applet, check the option “<i>I accept the risk and want to run this application</i>” in the <i>Security Warning</i> dialog, then click <strong>Run</strong>.</p> <p>Now click the <strong>Browse</strong> button in the applet again, the <i>Open</i> dialog is now displayed:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/open%20dialog.png" alt="open dialog" width="500" height="353" /></p> <p>That’s the process of signing a Java applet using a self-signed certificate. Let’s switch to second approach.</p> <p>&nbsp;</p> <h2>5. Sign aJava applet using trusted certificate</h2> <p>A trusted certificate is one which is signed by a public trusted certificate authority, such as Verisign, Thawte, Entrust…This process is similar to self-signing, except that we don’t create our own certificate using the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">keytool</span> tool. Instead, we have to purchase and obtain a certificate issued by the certificate authority – which takes more time and cost. However, this method increases degree of trust to our application, because no one can fake a trusted certificate.</p> <p>Suppose we have our trusted certificate stored in a .pfx file format, <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">CompanyCert.pfx</span> and we know the password to access the certificate. Use the following command syntax to obtain alias name of the certificate:</p> <p style="text-align: center;" align="center"><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">keytool -list -storetype pkcs12 -keystore </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;filename&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -storepass </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;password&gt;</em></span></span></p> <p><span style="color: #800000;"></span>For example:</p> <p style="text-indent: 0.5in;"><span style="color: #800000;"><strong><span style="font-size: 8pt; line-height: 115%; font-family: 'Courier New';">keytool -list -storetype pkcs12 -keystore CompanyCert.pfx -storepass myStorePass</span></strong></span></p> <p><span style="color: #800000;"></span>We got the output like the following screenshot:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/get%20certificate%20alias.png" alt="get certificate alias" width="700" height="219" /></p> <p>The alias name is shown in the yellow-marked section (for security purpose, other information is blurred in this screenshot). Copy the alias name, and using the following command to sign the applet’s jar file:</p> <p style="text-align: center;" align="center"><span style="color: #800000; font-size: 8pt;"><strong><span style="line-height: 115%; font-family: 'Courier New';">jarsigner -storetype pkcs12 -keystore CompanyCert.pfx -storepass myStorePass FileApplet.jar myAlias</span></strong></span></p> <p><span style="color: #800000; font-size: 8pt;"></span>Replace the “myStorePass” and “myAlias” by real value correspond to your certificate.</p> <p>Now run the applet again, a warning dialog appears as following screenshot:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/run%20trusted%20certificate%20warning.png" alt="run trusted certificate warning" width="504" height="279" /></p> <p>We can notice that, this time, the warning dialog is slightly different than the one for a self-signed certificate. Obviously the publisher name has a specific value rather than UNKNOWN. Check “<i>Always trust content from this publisher</i>” then click <strong>Run</strong>. We have granted permission for an applet signed by a trusted certificate.</p> <p><span style="font-size: 12pt;"><strong><span style="line-height: 18.4px;">NOTES:</span></strong></span></p> <ul> <li style="list-style-type: none;"> <ul> <li>If the applet requires external libraries, we should sign all the required jar files as well.</li> <li>You can find a list of trusted certificates for all Java applets in the Java Plug-in control panel, under Security tab.</li> <li>You can use the command&nbsp;<span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 13.8px; font-family: 'Courier New';">jarsigner –verify &lt;jar_file&gt;&nbsp;</span></strong></span>to verify if a jar file is signed or not.</li> </ul> </li> </ul> <p>&nbsp;</p> <h3 style="padding: 0px; font-family: 'Open Sans', sans-serif; color: #333333;"><span style="margin: 0px; padding: 0px;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br style="margin: 0px; padding: 0px;" /></span></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div><div class="feed-description"><p>This tutorial explains necessary steps to sign a Java applet, either by using a self-signed certificate (self-signing) or by using a trusted certificate issued by a certificate authority like VeriSign or Thawte. Signing a Java applet is not difficult task, and it should be done correctly. First, let’s take a look why sometimes we need to have a Java applet signed.</p> <p>&nbsp;</p> <h2>1. Why need to sign Java applet?</h2> <p>When running inside web browser, Java applets are living in a restricted environment so called “sandbox” – which prevents the applets from accessing system resources and devices such as files, network connections, printers, cameras, microphones, etc – without user-granted permission. This tight security is designed to make users safe from malicious code which always tries to execute automatically without user’s intervention.</p> <p>The following picture illustrates how such restriction is applied for unsigned applet and signed applet within the sandbox:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/java%20applet%20sandbox.png" alt="java applet sandbox" width="360" height="378" /></p> <p>To access system resources and devices, the applet must be signed with a digital certificate which is issued by a trusted Certificate Authority (CA). Thus the user can trust this applet and grant permission.</p> <p>For example, you are developing applets that read/write files system, capture video from camera, or record audio from microphone… then you must sign your applets, definitely.</p> <p>Though there is another way to grant permission for applets through the usage of <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">.java.policy&nbsp;</span>file, but this method is for development only. It’s not suitable for deploying applets on production environment because it requires the user manually put the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">.java.policy&nbsp;</span>file on their computer. Thus signing the applet is the convenient way.</p> <p>&nbsp;</p> <h2>2. A Sample applet for signing</h2> <p>To illustrate the process of signing an applet, this tutorial will work with a sample Java applet that shows an open dialog for browsing files on user’s computer. Here is code of the applet:</p> <pre class="brush:java;toolbar:false">package net.codejava.applet; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FileBrowseApplet extends JApplet { private JButton button = new JButton("Browse"); public void init() { getContentPane().setLayout(new FlowLayout()); getContentPane().add(button); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { JFileChooser fileChooser = new JFileChooser(); fileChooser.showOpenDialog(FileBrowseApplet.this); } }); } } </pre> <p>&nbsp;And here is the HTML page that shows the applet:</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt;&lt;title&gt;File Browse Applet Demo&lt;/title&gt;&lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;applet id="FileApplet" code = "net.codejava.applet.FileBrowseApplet.class" archive="FileApplet.jar" width="200" height="60"&gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;/html&gt; </pre> <p>&nbsp;Opening the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">FileApplet.html</span> will show up the applet as following screenshot:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/file%20browse%20applet%20in%20browser.png" alt="file browse applet in browser" width="400" height="179" /></p> <p>When hitting the <strong>Browse</strong> button, an exception of type <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">java.security.AccessControlException</span> is thrown:</p> <p>&nbsp;<img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/java%20console%20error.png" alt="java console error" width="580" height="374" /></p> <p>It is because the open dialog needs permission to access file system resources, but an unsigned applet is denied this permission by default. So, to overcome this, the applet must be signed.</p> <p>&nbsp;</p> <h2>3. Requirement to sign Java applet</h2> <p>Before signing an applet, it requires packaging all applet classes into a single jar file. This can be done by using <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">jar</span> tool which comes with JDK. For example:</p> <p style="text-align: center;" align="center"><span style="color: #800000;"><strong><span style="font-family: 'Courier New';">jar cfv FileApplet.jar net</span></strong></span></p> <p>That will add all classes under package <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">net.codejava</span> into <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">FileApplet.jar</span> file.</p> <p>And two programs are required:</p> <ul> <li style="list-style-type: none;"> <ul> <li><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">keytool.exe</span>: A key and certificate management tool. We use this tool for generating a RSA public/private key pair associates with a certificate - called self-signed certificate, or reading a trusted certificate.</li> <li><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">jarsigner.exe</span>: A signing tool that creates a digital signature of a jar file using a provided certificate.</li> </ul> </li> </ul> <p>These tools come with JDK and are installed under <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JDK_HOME\bin</span> directory.</p> <p>The following diagram illustrates the signing process:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/signing%20process.png" alt="signing process" width="640" height="351" /></p> <p>Now, let’s dive into the signing process using two types of certificate: self-signed certificate and trusted certificate.</p> <p>&nbsp;</p> <h2>4. Sign a Java applet using self-signed certificate</h2> <p>A certificate which is created and signed by a same entity is called self-signed certificate. This self-signing method is simple and quick because we can use our own certificate which is generated by the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">keytool</span> program; don’t have to spend time on requesting and obtaining certificate from a certificate authority; and it does not cost any bucks. However, its drawback is that the user may not accept the certificate since it is not trusted by any public authority. So this method is suitable for development and testing purpose only.</p> <p>Syntax of the command to generate a self-signed certificate is as follows:</p> <p><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">keytool -genkey -alias </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;alias&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -keystore </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;filename&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -keypass </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;keypass&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -dname </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;dname&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -storepass </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;storepass&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -validity </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;days&gt;</em></span></span></p> <p><span style="color: #800000;"><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"></span></span>Where:</p> <ul> <li style="list-style-type: none;"> <ul> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;alias&gt;</span></em></span>: a unique identifier of the certificate. Note that alias is case-insensitive.</li> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;filename&gt;</span></em></span>: name of the file which stores the certificate.</li> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;keypass&gt;</span></em></span>: password to protects the key pair.</li> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;dname&gt;</span></em></span>: distinguished name of the certificate.</li> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;storepass&gt;</span></em></span>: password of the certificate store.</li> <li><span style="color: #800000;"><em><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;days&gt;</span></em></span>: number of days after which the certificate will expire.</li> </ul> </li> </ul> <p>For example, the following command generates a self-signed certificate called “<em>myAlias</em>” and stores it in a file named as “<em>myCert</em>”:</p> <p><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">keytool -genkey -alias myAlias -keystore myCert -keypass myKeyPass -dname "CN=FileApplet" -storepass myStorePass -validity 1825</span></strong></span></p> <p>The <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">–validity</span><span style="font-size: 10pt; line-height: 115%;"> </span>parameter specifies that this certificate will expire after 5 years (1825=5x365).</p> <p>Now we use the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">jarsigner</span> tool to sign the applet’s jar file. Syntax of this command is as follows:</p> <p><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">jarsigner -keystore </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;keystore_file&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -keypass </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;keypass&gt;</em></span><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> </span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">-storepass </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;storepass&gt;</em></span><em><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> &lt;jar_file&gt; &lt;alias&gt;</span></em></span></p> <p>For example, the following command signs the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">FileApplet.jar</span> using the self-signed certificate stored in the file <span style="color: #800000;"><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">myCert</span>:</span></p> <p><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">jarsigner -keystore myCert -keypass myKeyPass -storepass myStorePass FileApplet.jar myAlias</span></strong></span></p> <p><span style="color: #800000;"></span>The <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">jarsigner</span> tool signs the applet by creating digital signature for all classes of the applet and put it into <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">META-INF</span> directory inside the jar file.</p> <p>Run the applet again by refreshing the browser, this time a <i>Security Warning</i> dialog shows up:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/run%20self-signed%20applet%20warning.png" alt="run self-signed applet warning" width="500" height="320" /></p> <p>Note that the <i>Publisher</i> field is set to UNKNOWN because this certificate is self-signed.</p> <p>Click <strong>More Information</strong>, then <strong>Certificate Details…</strong> to see information about the certificate, like the following screenshot:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/self-signed%20certificate%20information.png" alt="self-signed certificate information" width="700" height="289" /></p> <p>To grant permission for the applet, check the option “<i>I accept the risk and want to run this application</i>” in the <i>Security Warning</i> dialog, then click <strong>Run</strong>.</p> <p>Now click the <strong>Browse</strong> button in the applet again, the <i>Open</i> dialog is now displayed:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/open%20dialog.png" alt="open dialog" width="500" height="353" /></p> <p>That’s the process of signing a Java applet using a self-signed certificate. Let’s switch to second approach.</p> <p>&nbsp;</p> <h2>5. Sign aJava applet using trusted certificate</h2> <p>A trusted certificate is one which is signed by a public trusted certificate authority, such as Verisign, Thawte, Entrust…This process is similar to self-signing, except that we don’t create our own certificate using the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">keytool</span> tool. Instead, we have to purchase and obtain a certificate issued by the certificate authority – which takes more time and cost. However, this method increases degree of trust to our application, because no one can fake a trusted certificate.</p> <p>Suppose we have our trusted certificate stored in a .pfx file format, <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">CompanyCert.pfx</span> and we know the password to access the certificate. Use the following command syntax to obtain alias name of the certificate:</p> <p style="text-align: center;" align="center"><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">keytool -list -storetype pkcs12 -keystore </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;filename&gt;</em></span><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"> -storepass </span></strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><em>&lt;password&gt;</em></span></span></p> <p><span style="color: #800000;"></span>For example:</p> <p style="text-indent: 0.5in;"><span style="color: #800000;"><strong><span style="font-size: 8pt; line-height: 115%; font-family: 'Courier New';">keytool -list -storetype pkcs12 -keystore CompanyCert.pfx -storepass myStorePass</span></strong></span></p> <p><span style="color: #800000;"></span>We got the output like the following screenshot:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/get%20certificate%20alias.png" alt="get certificate alias" width="700" height="219" /></p> <p>The alias name is shown in the yellow-marked section (for security purpose, other information is blurred in this screenshot). Copy the alias name, and using the following command to sign the applet’s jar file:</p> <p style="text-align: center;" align="center"><span style="color: #800000; font-size: 8pt;"><strong><span style="line-height: 115%; font-family: 'Courier New';">jarsigner -storetype pkcs12 -keystore CompanyCert.pfx -storepass myStorePass FileApplet.jar myAlias</span></strong></span></p> <p><span style="color: #800000; font-size: 8pt;"></span>Replace the “myStorePass” and “myAlias” by real value correspond to your certificate.</p> <p>Now run the applet again, a warning dialog appears as following screenshot:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/signing/run%20trusted%20certificate%20warning.png" alt="run trusted certificate warning" width="504" height="279" /></p> <p>We can notice that, this time, the warning dialog is slightly different than the one for a self-signed certificate. Obviously the publisher name has a specific value rather than UNKNOWN. Check “<i>Always trust content from this publisher</i>” then click <strong>Run</strong>. We have granted permission for an applet signed by a trusted certificate.</p> <p><span style="font-size: 12pt;"><strong><span style="line-height: 18.4px;">NOTES:</span></strong></span></p> <ul> <li style="list-style-type: none;"> <ul> <li>If the applet requires external libraries, we should sign all the required jar files as well.</li> <li>You can find a list of trusted certificates for all Java applets in the Java Plug-in control panel, under Security tab.</li> <li>You can use the command&nbsp;<span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 13.8px; font-family: 'Courier New';">jarsigner –verify &lt;jar_file&gt;&nbsp;</span></strong></span>to verify if a jar file is signed or not.</li> </ul> </li> </ul> <p>&nbsp;</p> <h3 style="padding: 0px; font-family: 'Open Sans', sans-serif; color: #333333;"><span style="margin: 0px; padding: 0px;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br style="margin: 0px; padding: 0px;" /></span></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div>LiveConnect - The API for communication between Java applet and Javascript2012-09-08T01:49:40-05:002012-09-08T01:49:40-05:00https://codejava.net/java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascriptNam Ha Minhhainatu@gmail.com<div class="feed-description"><p>Java applet can communicate with Javascript in a same HTML page through a technology called <a href="http://jdk6.java.net/plugin2/liveconnect" rel="nofollow" target="_blank">LiveConnect</a> which is supported by all major web browsers. The following figure depicts the communication between Java applet and Javascript within web browser’s environment:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/liveconnect/liveconnect.png" alt="liveconnect" width="500" height="323" /></p> <h2><span style="line-height: 115%;">JAR files for Java applet – Javascript communication:</span></h2> <p>The LiveConnect technology is both implemented in browser side as well as in Java side. For the Java side, it is implemented in the <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">plugin.jar&nbsp;</span>library which can be found under either following locations:</p> <ul> <li style="list-style-type: none;"> <ul> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><i>JRE_Home</i><strong>\lib </strong>(for example: <i>c:\Program Files\Java\jdk1.7.0_03\jre\lib\plugin.jar</i>)</li> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><i>JDK_Home</i><strong>\jre\lib </strong>(for example: <i>c:\Program Files\Java\jre7\lib\plugin.jar</i>)</li> </ul> </li> </ul> <p>So when compiling source code which is using LiveConnect, remember to include the <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">plugin.jar</span> file to the classpath. But when running Java program, there is no need to include the <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">plugin.jar</span> file because it is already available as a part of Java runtime environment.</p> <p>&nbsp;</p> <h2><span style="line-height: 115%;">LiveConnect API:</span></h2> <p>LiveConnect API allows developers to:</p> <ul> <li style="list-style-type: none;"> <ul> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Access Javascript methods, variables and arrays from Java applet.</li> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Access Java applet’s public methods and variables from Javascript.</li> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Access any Java objects and its members if exposed via the applet.</li> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Passing arrays as arguments when calling Javascript methods from Java applet and vice-versa.</li> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Evaluates Javascript expression from Java applet.</li> </ul> </li> </ul> <p>The Java Plug-in is responsible for handling communication of Java - Javascript, as well as handling data type conversion on both ends.</p> <p>The API is fairly simple, with only one class, <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span>, and only one exception, <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSException</span>. Both are declared under package <span style="color: #800000;"><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">netscape.javascript</span>.</span></p> <ul> <li style="list-style-type: none;"> <ul> <li>Class <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><span style="color: #800000;">JSObject</span>:</span> acts as main interface between Java code and Javascript. It defines methods for accessing Javascript objects, methods and array elements from Java code.</li> <li>Exception <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSException</span>: all methods of the class <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> throw this exception if there is any error occurred in the Javascript engine. So remember to catch this exception when calling methods of the <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> class.</li> </ul> </li> </ul> <p>The following list summarizes methods of the <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> class:</p> <p>Initialization method:</p> <ul> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">static JSObject&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>getWindow</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(Applet applet):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">To start Java-Javascript communication, obtain a&nbsp;</span><span style="color: #000000; font-size: 9pt; font-family: 'Courier New';">JSObject</span><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">&nbsp;for the window that contains the given applet.</span></span></li> </ul> <p>&nbsp;</p> <p>Method Invocation:</p> <ul> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">Object&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>call</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(String&nbsp;methodName, Object[]&nbsp;args):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Invokes a Javascript method with an array of arguments.</span></span></li> </ul> <p>&nbsp;</p> <p>Expression evaluation:</p> <ul> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">Object&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>eval</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(java.lang.String&nbsp;s):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Evaluates a Javascript expression.</span></span></li> </ul> <p>&nbsp;</p> <p>Member methods:</p> <ul> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">Object&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>getMember</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(String&nbsp;name):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Retrieves a named member of a Javascript object.</span></span></li> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">void&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>setMember</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(String&nbsp;name, Object&nbsp;value):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Sets a named member of a Javascript object.</span></span></span></li> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">void&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>removeMember</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(String&nbsp;name):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Removes a named member of a Javascript object.</span></span></span></span></span></li> </ul> <p>&nbsp;</p> <p><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Array methods:</span></span></span></span></span></p> <ul> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">void&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>setSlot</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(int index, Object value):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Sets an indexed member of a Javascript object.</span></span></span></span></span></span></span></li> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">Object&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>getSlot</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(int&nbsp;index):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Retrieves an indexed member of a Javascript object.</span></span></span></span></span></span></span></span></span></li> </ul> <p>&nbsp;</p> <h2><span style="line-height: 115%;">Data type conversion:</span></h2> <p>When invoking Javascript methods from Java applet and vice-versa, arguments and return values are automatically converted from Java data type to Javascript data type (and vice-versa) by the Java Plug-in. The following table summarizes how the conversion is applied for a particular data type:</p> <table style="border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td style="width: 95.75pt; border: 1pt solid windowtext; background: none repeat scroll 0% 0% #548dd4; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="color: white;">Category</span></strong></p> </td> <td style="border: 1pt solid windowtext; background: none repeat scroll 0% 0% #548dd4; padding: 0in 5.4pt;" valign="top" width="252"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="color: white;">From Java data type</span></strong></p> </td> <td style="border: 1pt solid windowtext; background: none repeat scroll 0% 0% #548dd4; padding: 0in 5.4pt;" valign="top" width="228"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="color: white;">To Javascript data type</span></strong></p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Numeric values</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="252"> <p style="margin-bottom: 0.0001pt; line-height: normal;">byte, character, short, int, long, float and double.</p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="228"> <p style="margin-bottom: 0.0001pt; line-height: normal;">are converted to the closest available Javascript numeric type.</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Strings</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="252"> <p style="margin-bottom: 0.0001pt; line-height: normal;">String</p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="228"> <p style="margin-bottom: 0.0001pt; line-height: normal;">are converted to Javascript strings.</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Boolean values</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="252"> <p style="margin-bottom: 0.0001pt; line-height: normal;">boolean</p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="228"> <p style="margin-bottom: 0.0001pt; line-height: normal;">is converted to Javascript boolean.</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Objects</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="252"> <p style="margin-bottom: 0.0001pt; line-height: normal;">Object</p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="228"> <p style="margin-bottom: 0.0001pt; line-height: normal;">is converted to Javascript wrapper object.</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Arrays</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" colspan="2" valign="top" width="480"> <p style="margin-bottom: 0.0001pt; line-height: normal;">Java arrays are converted to Javascript pseudo-Array object</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Return values</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" colspan="2" valign="top" width="480"> <p style="margin-bottom: 0.0001pt; line-height: normal;">Return values from <span style="font-size: 9pt; font-family: 'Courier New';">call()</span> and <span style="font-size: 9pt; font-family: 'Courier New';">eval()</span> are always converted to Object in Java.</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128">&nbsp;</td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" colspan="2" valign="top" width="480">&nbsp;</td> </tr> </tbody> </table> <p>&nbsp;</p> <p>For more details about data type conversion between Java an Javascript, see this <a href="http://jdk6.java.net/plugin2/liveconnect/#JS_JAVA_CONVERSIONS" rel="nofollow" target="_blank">documentation</a>.</p> <p>&nbsp;</p> <h2><span style="line-height: 115%;">Java Applet - Javascript Examples:</span></h2> <p>The following example briefly illustrates how to call a method, execute an expression, get value of a named member and get value of an indexed array element of Javascript from Java applet.</p> <p>Source code of HTML and Javascript:</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;LiveConnect - Java-Javascript communnication demo&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;applet id="testApplet" code="TestApplet.class" width="200" height="80" &gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;script type="text/javascript"&gt; var coop = "Ooops!"; this[1] = "Slot 1"; function foo() { return "This is from foo()"; } function bar(firstName, lastName) { return "Greeting " + firstName + " " + lastName + "!"; } &lt;/script&gt; &lt;/html&gt; </pre> <p>&nbsp;Source code of Java applet:</p> <pre class="brush:java;toolbar:false">import java.awt.*; import java.awt.event.*; import javax.swing.*; import netscape.javascript.*; public class TestApplet extends JApplet { private JButton button = new JButton("Call Javascript"); private JLabel label = new JLabel(); public void init() { getContentPane().setLayout(new BorderLayout()); getContentPane().add(button, BorderLayout.NORTH); getContentPane().add(label, BorderLayout.SOUTH); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { Thread runner = new Thread(new Runnable() { public void run() { try { testLiveConnect(); } catch (JSException jse) { // Error jse.printStackTrace(); } } }); runner.start(); } }); } private void testLiveConnect() throws JSException { JSObject jso = JSObject.getWindow(this); // call Javascript's method foo() with no argument String result = (String) jso.call("foo", null); label.setText(result); // delay 2 seconds to see the result try { Thread.sleep(2000); } catch (InterruptedException ie) {}; // call Javascript's method foo() with two arguments result = (String) jso.call("bar", new String[] {"Alice", "Alisa"}); label.setText(result); try { Thread.sleep(2000); } catch (InterruptedException ie) {}; // execute a Javascript expression String expression = "alert('Hi, I am from Javascript.');"; jso.eval(expression); try { Thread.sleep(2000); } catch (InterruptedException ie) {}; // get value of a named member from Javascript result = (String) jso.getMember("coop"); label.setText(result); try { Thread.sleep(2000); } catch (InterruptedException ie) {}; // get value of an indexed member from Javascript result = (String) jso.getSlot(1); label.setText(result); } } </pre> <p>&nbsp;</p> <p><strong><span style="font-size: 12pt; line-height: 115%;">References:</span></strong></p> <p style="text-indent: 0.5in;"><a href="http://jdk6.java.net/plugin2/liveconnect/" rel="nofollow" target="_blank">LiveConnect specification</a></p> <p style="text-indent: 0.5in;"><a href="http://jdk6.java.net/nonav/plugin2/liveconnect/jsobject-javadoc/" rel="nofollow" target="_blank">LiveConnect Javadoc</a></p> <p style="text-indent: 0.5in;">&nbsp;</p> <h3 style="padding: 0px; font-family: 'Open Sans', sans-serif; color: #333333;"><span style="margin: 0px; padding: 0px; font-family: Arial, Helvetica, sans-serif;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br style="margin: 0px; padding: 0px;" /></span></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank"></a><a href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign Java applet</a></span></li> </ul></div><div class="feed-description"><p>Java applet can communicate with Javascript in a same HTML page through a technology called <a href="http://jdk6.java.net/plugin2/liveconnect" rel="nofollow" target="_blank">LiveConnect</a> which is supported by all major web browsers. The following figure depicts the communication between Java applet and Javascript within web browser’s environment:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/liveconnect/liveconnect.png" alt="liveconnect" width="500" height="323" /></p> <h2><span style="line-height: 115%;">JAR files for Java applet – Javascript communication:</span></h2> <p>The LiveConnect technology is both implemented in browser side as well as in Java side. For the Java side, it is implemented in the <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">plugin.jar&nbsp;</span>library which can be found under either following locations:</p> <ul> <li style="list-style-type: none;"> <ul> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><i>JRE_Home</i><strong>\lib </strong>(for example: <i>c:\Program Files\Java\jdk1.7.0_03\jre\lib\plugin.jar</i>)</li> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><i>JDK_Home</i><strong>\jre\lib </strong>(for example: <i>c:\Program Files\Java\jre7\lib\plugin.jar</i>)</li> </ul> </li> </ul> <p>So when compiling source code which is using LiveConnect, remember to include the <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">plugin.jar</span> file to the classpath. But when running Java program, there is no need to include the <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">plugin.jar</span> file because it is already available as a part of Java runtime environment.</p> <p>&nbsp;</p> <h2><span style="line-height: 115%;">LiveConnect API:</span></h2> <p>LiveConnect API allows developers to:</p> <ul> <li style="list-style-type: none;"> <ul> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Access Javascript methods, variables and arrays from Java applet.</li> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Access Java applet’s public methods and variables from Javascript.</li> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Access any Java objects and its members if exposed via the applet.</li> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Passing arrays as arguments when calling Javascript methods from Java applet and vice-versa.</li> <li style="text-indent: -0.25in;"><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Evaluates Javascript expression from Java applet.</li> </ul> </li> </ul> <p>The Java Plug-in is responsible for handling communication of Java - Javascript, as well as handling data type conversion on both ends.</p> <p>The API is fairly simple, with only one class, <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span>, and only one exception, <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSException</span>. Both are declared under package <span style="color: #800000;"><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">netscape.javascript</span>.</span></p> <ul> <li style="list-style-type: none;"> <ul> <li>Class <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><span style="color: #800000;">JSObject</span>:</span> acts as main interface between Java code and Javascript. It defines methods for accessing Javascript objects, methods and array elements from Java code.</li> <li>Exception <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSException</span>: all methods of the class <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> throw this exception if there is any error occurred in the Javascript engine. So remember to catch this exception when calling methods of the <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> class.</li> </ul> </li> </ul> <p>The following list summarizes methods of the <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> class:</p> <p>Initialization method:</p> <ul> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">static JSObject&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>getWindow</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(Applet applet):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">To start Java-Javascript communication, obtain a&nbsp;</span><span style="color: #000000; font-size: 9pt; font-family: 'Courier New';">JSObject</span><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">&nbsp;for the window that contains the given applet.</span></span></li> </ul> <p>&nbsp;</p> <p>Method Invocation:</p> <ul> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">Object&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>call</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(String&nbsp;methodName, Object[]&nbsp;args):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Invokes a Javascript method with an array of arguments.</span></span></li> </ul> <p>&nbsp;</p> <p>Expression evaluation:</p> <ul> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">Object&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>eval</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(java.lang.String&nbsp;s):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Evaluates a Javascript expression.</span></span></li> </ul> <p>&nbsp;</p> <p>Member methods:</p> <ul> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">Object&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>getMember</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(String&nbsp;name):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Retrieves a named member of a Javascript object.</span></span></li> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">void&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>setMember</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(String&nbsp;name, Object&nbsp;value):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Sets a named member of a Javascript object.</span></span></span></li> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">void&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>removeMember</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(String&nbsp;name):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Removes a named member of a Javascript object.</span></span></span></span></span></li> </ul> <p>&nbsp;</p> <p><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Array methods:</span></span></span></span></span></p> <ul> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">void&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>setSlot</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(int index, Object value):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Sets an indexed member of a Javascript object.</span></span></span></span></span></span></span></li> <li><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;"><span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">Object&nbsp;</span><span style="font-family: 'Courier New'; font-size: 12px; color: #800000;"><strong>getSlot</strong></span><span style="color: #000000; font-family: 'Courier New'; font-size: 12px;">(int&nbsp;index):&nbsp;<span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">Retrieves an indexed member of a Javascript object.</span></span></span></span></span></span></span></span></span></li> </ul> <p>&nbsp;</p> <h2><span style="line-height: 115%;">Data type conversion:</span></h2> <p>When invoking Javascript methods from Java applet and vice-versa, arguments and return values are automatically converted from Java data type to Javascript data type (and vice-versa) by the Java Plug-in. The following table summarizes how the conversion is applied for a particular data type:</p> <table style="border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td style="width: 95.75pt; border: 1pt solid windowtext; background: none repeat scroll 0% 0% #548dd4; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="color: white;">Category</span></strong></p> </td> <td style="border: 1pt solid windowtext; background: none repeat scroll 0% 0% #548dd4; padding: 0in 5.4pt;" valign="top" width="252"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="color: white;">From Java data type</span></strong></p> </td> <td style="border: 1pt solid windowtext; background: none repeat scroll 0% 0% #548dd4; padding: 0in 5.4pt;" valign="top" width="228"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="color: white;">To Javascript data type</span></strong></p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Numeric values</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="252"> <p style="margin-bottom: 0.0001pt; line-height: normal;">byte, character, short, int, long, float and double.</p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="228"> <p style="margin-bottom: 0.0001pt; line-height: normal;">are converted to the closest available Javascript numeric type.</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Strings</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="252"> <p style="margin-bottom: 0.0001pt; line-height: normal;">String</p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="228"> <p style="margin-bottom: 0.0001pt; line-height: normal;">are converted to Javascript strings.</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Boolean values</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="252"> <p style="margin-bottom: 0.0001pt; line-height: normal;">boolean</p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="228"> <p style="margin-bottom: 0.0001pt; line-height: normal;">is converted to Javascript boolean.</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Objects</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="252"> <p style="margin-bottom: 0.0001pt; line-height: normal;">Object</p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="228"> <p style="margin-bottom: 0.0001pt; line-height: normal;">is converted to Javascript wrapper object.</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Arrays</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" colspan="2" valign="top" width="480"> <p style="margin-bottom: 0.0001pt; line-height: normal;">Java arrays are converted to Javascript pseudo-Array object</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128"> <p style="margin-bottom: 0.0001pt; line-height: normal;"><i>Return values</i></p> </td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" colspan="2" valign="top" width="480"> <p style="margin-bottom: 0.0001pt; line-height: normal;">Return values from <span style="font-size: 9pt; font-family: 'Courier New';">call()</span> and <span style="font-size: 9pt; font-family: 'Courier New';">eval()</span> are always converted to Object in Java.</p> </td> </tr> <tr> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top" width="128">&nbsp;</td> <td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" colspan="2" valign="top" width="480">&nbsp;</td> </tr> </tbody> </table> <p>&nbsp;</p> <p>For more details about data type conversion between Java an Javascript, see this <a href="http://jdk6.java.net/plugin2/liveconnect/#JS_JAVA_CONVERSIONS" rel="nofollow" target="_blank">documentation</a>.</p> <p>&nbsp;</p> <h2><span style="line-height: 115%;">Java Applet - Javascript Examples:</span></h2> <p>The following example briefly illustrates how to call a method, execute an expression, get value of a named member and get value of an indexed array element of Javascript from Java applet.</p> <p>Source code of HTML and Javascript:</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;LiveConnect - Java-Javascript communnication demo&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;applet id="testApplet" code="TestApplet.class" width="200" height="80" &gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;script type="text/javascript"&gt; var coop = "Ooops!"; this[1] = "Slot 1"; function foo() { return "This is from foo()"; } function bar(firstName, lastName) { return "Greeting " + firstName + " " + lastName + "!"; } &lt;/script&gt; &lt;/html&gt; </pre> <p>&nbsp;Source code of Java applet:</p> <pre class="brush:java;toolbar:false">import java.awt.*; import java.awt.event.*; import javax.swing.*; import netscape.javascript.*; public class TestApplet extends JApplet { private JButton button = new JButton("Call Javascript"); private JLabel label = new JLabel(); public void init() { getContentPane().setLayout(new BorderLayout()); getContentPane().add(button, BorderLayout.NORTH); getContentPane().add(label, BorderLayout.SOUTH); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { Thread runner = new Thread(new Runnable() { public void run() { try { testLiveConnect(); } catch (JSException jse) { // Error jse.printStackTrace(); } } }); runner.start(); } }); } private void testLiveConnect() throws JSException { JSObject jso = JSObject.getWindow(this); // call Javascript's method foo() with no argument String result = (String) jso.call("foo", null); label.setText(result); // delay 2 seconds to see the result try { Thread.sleep(2000); } catch (InterruptedException ie) {}; // call Javascript's method foo() with two arguments result = (String) jso.call("bar", new String[] {"Alice", "Alisa"}); label.setText(result); try { Thread.sleep(2000); } catch (InterruptedException ie) {}; // execute a Javascript expression String expression = "alert('Hi, I am from Javascript.');"; jso.eval(expression); try { Thread.sleep(2000); } catch (InterruptedException ie) {}; // get value of a named member from Javascript result = (String) jso.getMember("coop"); label.setText(result); try { Thread.sleep(2000); } catch (InterruptedException ie) {}; // get value of an indexed member from Javascript result = (String) jso.getSlot(1); label.setText(result); } } </pre> <p>&nbsp;</p> <p><strong><span style="font-size: 12pt; line-height: 115%;">References:</span></strong></p> <p style="text-indent: 0.5in;"><a href="http://jdk6.java.net/plugin2/liveconnect/" rel="nofollow" target="_blank">LiveConnect specification</a></p> <p style="text-indent: 0.5in;"><a href="http://jdk6.java.net/nonav/plugin2/liveconnect/jsobject-javadoc/" rel="nofollow" target="_blank">LiveConnect Javadoc</a></p> <p style="text-indent: 0.5in;">&nbsp;</p> <h3 style="padding: 0px; font-family: 'Open Sans', sans-serif; color: #333333;"><span style="margin: 0px; padding: 0px; font-family: Arial, Helvetica, sans-serif;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br style="margin: 0px; padding: 0px;" /></span></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank"></a><a href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign Java applet</a></span></li> </ul></div>How to show Java applet in HTML page2013-01-10T08:22:02-06:002013-01-10T08:22:02-06:00https://codejava.net/java-se/applet/how-to-show-java-applet-in-html-pageNam Ha Minhhainatu@gmail.com<div class="feed-description"><p>An applet is a Java program runs inside a web browser. Typically, you write the applet as a normal Java class (extending from JApplet class) and embed it into an HTML page using the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;&nbsp;</span>tag so the users can see and interact with your applet. This article describes various examples of how to display a Java applet inside an HTML page:</p> <ul> <li style="list-style-type: none;"> <ul> <li><a href="#SimplestWay">The simplest way to show a Java applet</a></li> <li><a href="#AppletInJar">Show a Java applet bundled in a jar file</a></li> <li><a href="#Parameters">Show a Java applet with parameters</a></li> <li><a href="#ExternalJars">Show a Java applet having external jar files</a></li> <li><a href="#AlternateText">Be prepared if the user cannot run your applet</a></li> </ul> </li> </ul> <h2><a id="AppletTag" name="AppletTag"></a>1. Syntax of &lt;applet&gt; tag</h2> <p>According to Oracle <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/misc/applet.html" rel="nofollow" target="_blank">documentation</a>, following is a complete syntax of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;&nbsp;</span>tag:</p> <p style="margin-left: 30px;"><span style="color: #ff0000;"><strong><span style="font-family: courier new,courier;">&lt;APPLET</span></strong></span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;CODEBASE = codebaseURL</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;ARCHIVE = archiveList</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;<span style="color: #ff0000;"><strong>CODE = appletFile</strong> </span>...or...&nbsp; <span style="color: #ff0000;"><strong>OBJECT = serializedApplet</strong></span></span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;ALT = alternateText</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;NAME = appletInstanceName</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;WIDTH = pixels&nbsp; HEIGHT = pixels</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;ALIGN = alignment</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;VSPACE = pixels&nbsp; HSPACE = pixels</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;<span style="color: #ff0000;"><strong>&gt;</strong></span></span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;PARAM NAME = appletAttribute1 VALUE = value&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;PARAM NAME = appletAttribute2 VALUE = value&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;. . .</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;alternateHTML</span><br /><span style="color: #ff0000;"><strong><span style="font-family: courier new,courier;">&lt;/APPLET&gt;</span></strong></span></p> <p>The elements in bold and red are required. Others are optional. Put the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;&nbsp;</span>tag with its attributes inside the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;body&gt;&nbsp;</span>element of the HTML page, it can be nested in other container tags like <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;div&gt;</span> or <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;table&gt;</span>. All the applet’s files (classes, jars, resources, etc) should be placed in the same folder as the HTML page.</p> <p>&nbsp;</p> <h2><a id="SimplestWay" name="SimplestWay"></a>2. The simplest way to show a Java applet</h2> <p>Suppose you write an applet in <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">SimpleApplet.java</span> file and compile it to <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">SimpleApplet.class</span> file, the following code quickly shows off your applet:</p> <pre class="brush:xml;toolbar:false">&lt;applet code="SimpleApplet.class"&gt;&lt;/applet&gt; </pre> <p>Or set size for the applet explicitly:</p> <pre class="brush:xml;toolbar:false">&lt;applet code="SimpleApplet.class" width=”125” height=”125”&gt;&lt;/applet&gt; </pre> <h2><br /><a id="AppletInJar" name="AppletInJar"></a>3. Show a Java applet bundled in a jar file</h2> <p>It’s very common that you package the applet and its related classes as a single jar file. In this case, use the following code:</p> <pre class="brush:xml;toolbar:false">&lt;applet archive="SimpleApplet.jar" code="net.codejava.applet.SimpleApplet.class"&gt; &lt;/applet&gt; </pre> <p>That displays the applet bundled in a jar file named <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">SimpleApplet.jar</span> and the applet class file is <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">SimpleApplet </span>resides under the package <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">net.codejava.applet</span>.</p> <h2><br /><a id="Parameters" name="Parameters"></a>4. Show a Java applet with parameters</h2> <p>Sometimes you need to send some parameters from the HTML page to the Java applet. In this case, use following code:</p> <pre class="brush:xml;toolbar:false">&lt;applet archive="SimpleApplet.jar" code="net.codejava.applet.SimpleApplet.class"&gt; &lt;param name="user" value="tom"&gt; &lt;param name="password" value="secret"&gt; &lt;/applet&gt; </pre> <p>That sends two parameters called <span style="color: #800000;"><i>user</i></span> and <span style="color: #800000;"><i>password</i></span> with corresponding values to the applet. And inside the applet, we can access these parameters as follows:</p> <pre class="brush:java;toolbar:false">String user = getParameter("user"); String password = getParameter("password"); </pre> <h2><br /><a id="ExternalJars" name="ExternalJars"></a>5. Show a Java applet having external jar files</h2> <p>In case your applet comes with external library jar files, specify these jar files as follows:</p> <pre class="brush:xml;toolbar:false">&lt;applet archive="SimpleApplet.jar, mail.jar, video.jar" code="net.codejava.applet.SimpleApplet.class"&gt; &lt;/applet&gt; </pre> <p>In the above code, we specify two additional jar files <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">mail.jar&nbsp;</span>and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">video.jar</span> which are required by the applet. The jar files are separated by commas. If the jar files in a directory:</p> <pre class="brush:xml;toolbar:false">&lt;applet archive="SimpleApplet.jar, lib/mail.jar, lib/video.jar" code="net.codejava.applet.SimpleApplet.class"&gt; &lt;/applet&gt; </pre> <p>In the above code, the additional jar files are placed under <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">lib</span> directory.</p> <p>&nbsp;</p> <h2><a id="AlternateText" name="AlternateText"></a>6. Be prepared if the user cannot run your applet</h2> <p>In practice, the users may have problems of running your applet, such as the JRE/JDK or Java Plug-in have not installed, or their browser’s setting prevents Java applet from running, or even the browser does not understand the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;&nbsp;</span>tag. So you need to anticipate such cases, for example:</p> <pre class="brush:xml;toolbar:false">&lt;applet archive="SimpleApplet.jar" code="net.codejava.applet.SimpleApplet.class" alt="You need to have compatible browser to run this Java applet"&gt; Your browser does not support running applet. &lt;br&gt; Please install Java Plug-in from &lt;a href="http://java.com"&gt;java.com&lt;/a&gt; &lt;/applet&gt; </pre> <p>In the above code, we use the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">alt</span><span style="font-size: 10pt; line-height: 115%;"> </span>attribute and alternate HTML text between the opening and closing elements of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;</span> tag to tell the browse should display that information if it cannot run the applet.</p> <p>&nbsp;</p> <h3><span style="margin: 0px; padding: 0px; font-family: 'Open Sans', sans-serif; font-size: 18px;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign a Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br style="margin: 0px; padding: 0px;" /></span></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div><div class="feed-description"><p>An applet is a Java program runs inside a web browser. Typically, you write the applet as a normal Java class (extending from JApplet class) and embed it into an HTML page using the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;&nbsp;</span>tag so the users can see and interact with your applet. This article describes various examples of how to display a Java applet inside an HTML page:</p> <ul> <li style="list-style-type: none;"> <ul> <li><a href="#SimplestWay">The simplest way to show a Java applet</a></li> <li><a href="#AppletInJar">Show a Java applet bundled in a jar file</a></li> <li><a href="#Parameters">Show a Java applet with parameters</a></li> <li><a href="#ExternalJars">Show a Java applet having external jar files</a></li> <li><a href="#AlternateText">Be prepared if the user cannot run your applet</a></li> </ul> </li> </ul> <h2><a id="AppletTag" name="AppletTag"></a>1. Syntax of &lt;applet&gt; tag</h2> <p>According to Oracle <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/misc/applet.html" rel="nofollow" target="_blank">documentation</a>, following is a complete syntax of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;&nbsp;</span>tag:</p> <p style="margin-left: 30px;"><span style="color: #ff0000;"><strong><span style="font-family: courier new,courier;">&lt;APPLET</span></strong></span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;CODEBASE = codebaseURL</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;ARCHIVE = archiveList</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;<span style="color: #ff0000;"><strong>CODE = appletFile</strong> </span>...or...&nbsp; <span style="color: #ff0000;"><strong>OBJECT = serializedApplet</strong></span></span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;ALT = alternateText</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;NAME = appletInstanceName</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;WIDTH = pixels&nbsp; HEIGHT = pixels</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;ALIGN = alignment</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;VSPACE = pixels&nbsp; HSPACE = pixels</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;<span style="color: #ff0000;"><strong>&gt;</strong></span></span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;PARAM NAME = appletAttribute1 VALUE = value&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;PARAM NAME = appletAttribute2 VALUE = value&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;. . .</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;alternateHTML</span><br /><span style="color: #ff0000;"><strong><span style="font-family: courier new,courier;">&lt;/APPLET&gt;</span></strong></span></p> <p>The elements in bold and red are required. Others are optional. Put the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;&nbsp;</span>tag with its attributes inside the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;body&gt;&nbsp;</span>element of the HTML page, it can be nested in other container tags like <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;div&gt;</span> or <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;table&gt;</span>. All the applet’s files (classes, jars, resources, etc) should be placed in the same folder as the HTML page.</p> <p>&nbsp;</p> <h2><a id="SimplestWay" name="SimplestWay"></a>2. The simplest way to show a Java applet</h2> <p>Suppose you write an applet in <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">SimpleApplet.java</span> file and compile it to <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">SimpleApplet.class</span> file, the following code quickly shows off your applet:</p> <pre class="brush:xml;toolbar:false">&lt;applet code="SimpleApplet.class"&gt;&lt;/applet&gt; </pre> <p>Or set size for the applet explicitly:</p> <pre class="brush:xml;toolbar:false">&lt;applet code="SimpleApplet.class" width=”125” height=”125”&gt;&lt;/applet&gt; </pre> <h2><br /><a id="AppletInJar" name="AppletInJar"></a>3. Show a Java applet bundled in a jar file</h2> <p>It’s very common that you package the applet and its related classes as a single jar file. In this case, use the following code:</p> <pre class="brush:xml;toolbar:false">&lt;applet archive="SimpleApplet.jar" code="net.codejava.applet.SimpleApplet.class"&gt; &lt;/applet&gt; </pre> <p>That displays the applet bundled in a jar file named <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">SimpleApplet.jar</span> and the applet class file is <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">SimpleApplet </span>resides under the package <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">net.codejava.applet</span>.</p> <h2><br /><a id="Parameters" name="Parameters"></a>4. Show a Java applet with parameters</h2> <p>Sometimes you need to send some parameters from the HTML page to the Java applet. In this case, use following code:</p> <pre class="brush:xml;toolbar:false">&lt;applet archive="SimpleApplet.jar" code="net.codejava.applet.SimpleApplet.class"&gt; &lt;param name="user" value="tom"&gt; &lt;param name="password" value="secret"&gt; &lt;/applet&gt; </pre> <p>That sends two parameters called <span style="color: #800000;"><i>user</i></span> and <span style="color: #800000;"><i>password</i></span> with corresponding values to the applet. And inside the applet, we can access these parameters as follows:</p> <pre class="brush:java;toolbar:false">String user = getParameter("user"); String password = getParameter("password"); </pre> <h2><br /><a id="ExternalJars" name="ExternalJars"></a>5. Show a Java applet having external jar files</h2> <p>In case your applet comes with external library jar files, specify these jar files as follows:</p> <pre class="brush:xml;toolbar:false">&lt;applet archive="SimpleApplet.jar, mail.jar, video.jar" code="net.codejava.applet.SimpleApplet.class"&gt; &lt;/applet&gt; </pre> <p>In the above code, we specify two additional jar files <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">mail.jar&nbsp;</span>and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">video.jar</span> which are required by the applet. The jar files are separated by commas. If the jar files in a directory:</p> <pre class="brush:xml;toolbar:false">&lt;applet archive="SimpleApplet.jar, lib/mail.jar, lib/video.jar" code="net.codejava.applet.SimpleApplet.class"&gt; &lt;/applet&gt; </pre> <p>In the above code, the additional jar files are placed under <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">lib</span> directory.</p> <p>&nbsp;</p> <h2><a id="AlternateText" name="AlternateText"></a>6. Be prepared if the user cannot run your applet</h2> <p>In practice, the users may have problems of running your applet, such as the JRE/JDK or Java Plug-in have not installed, or their browser’s setting prevents Java applet from running, or even the browser does not understand the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;&nbsp;</span>tag. So you need to anticipate such cases, for example:</p> <pre class="brush:xml;toolbar:false">&lt;applet archive="SimpleApplet.jar" code="net.codejava.applet.SimpleApplet.class" alt="You need to have compatible browser to run this Java applet"&gt; Your browser does not support running applet. &lt;br&gt; Please install Java Plug-in from &lt;a href="http://java.com"&gt;java.com&lt;/a&gt; &lt;/applet&gt; </pre> <p>In the above code, we use the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">alt</span><span style="font-size: 10pt; line-height: 115%;"> </span>attribute and alternate HTML text between the opening and closing elements of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;</span> tag to tell the browse should display that information if it cannot run the applet.</p> <p>&nbsp;</p> <h3><span style="margin: 0px; padding: 0px; font-family: 'Open Sans', sans-serif; font-size: 18px;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign a Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br style="margin: 0px; padding: 0px;" /></span></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div>How to call Javascript function from Java applet2012-03-29T09:56:37-05:002012-03-29T09:56:37-05:00https://codejava.net/java-se/applet/call-javascript-function-from-java-appletNam Ha Minhhainatu@gmail.com<div class="feed-description"><p>Java applet can talk to Javascript through the technology called <a href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" rel="nofollow" target="_blank">LiveConnect</a>. In this article, we are going to show you how to write Java code to invoke Javascript function from within Java applet (include passing arguments of various data types and receiving return values).</p> <p><strong>Table of content:</strong></p> <ol> <li style="list-style-type: none;"><ol> <li><a href="#Steps">The steps to invoke Javascript function</a></li> <li><a href="#CompleteExample">A complete example</a></li> <li><a href="#NumericArguments">Passing numeric arguments example</a></li> <li><a href="#StringArguments">Passing String arguments example</a></li> <li><a href="#BooleanArguments">Passing boolean arguments example</a></li> <li><a href="#ArrayArgument">Passing array argument example</a></li> </ol></li> </ol> <h2><a id="Steps" name="Steps"></a>1. The steps to invoke Javascript function</h2> <p>The typical steps to call a Javascript function from a Java applet are as follows:</p> <ul> <li>Import the package <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">netscape.javascript</span>. This package contains only two classes: <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSException</span> and it is provided by the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">plugin.jar</span> library which resides in the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JRE_HOME\lib</span> directory or in <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JDK_HOME\jre\lib</span> directory. So we have to add path of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">plugin.jar</span> file to the compilation classpath.</li> <li>Obtain an instance of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span>class for the applet: <br /> <pre class="brush:java;toolbar:false">JSObject jsObj = JSObject.getWindow(applet); </pre> <p>&nbsp;</p> <p>Where <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">applet</span> is the instance of the applet class which extends from <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">java.applet.Applet </span>class. The <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> class defines principal methods which allow Java applet accessing Javascript variables and methods.</p> </li> <li>Assuming we want to invoke a Javascript method <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">add(a, b)</span> which returns sum of two numbers, write the following code:<br /> <pre class="brush:java;toolbar:false">Object result = jsObj.call("add", new Integer[] {17, 28}); </pre> The <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">call()</span> method’s first parameter is the name of Javascript method, and the second one is an array of <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">Object</span> for the Javascript method’s parameters. The <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">call()</span> method always returns an <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">Object</span> as return value of the invoked method (<span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">null</span> if the Javascript method does not return anything).</li> </ul> <p style="margin-left: 0in;"><strong><span style="font-size: 12pt; line-height: 115%;"></span></strong></p> <p style="margin-left: 0in;"><strong><span style="font-size: 12pt; line-height: 115%;">NOTES:</span></strong><span style="font-size: 12pt; line-height: 115%;"> </span></p> <ul> <li style="list-style-type: none;"> <ul> <li><span style="font-size: 12pt; line-height: 115%;">W</span>hen passing parameters to Javascript method, the Java data types are converted to Javascript equivalents, and the type of return value from Javascript is converted to Java equivalent.</li> <li>All methods of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> class throw <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSException</span>so we have to catch this exception. <p>&nbsp;</p> </li> </ul> </li> </ul> <h2><a id="CompleteExample" name="CompleteExample"></a>2. A complete Java applet invoking Javascript method example</h2> <p>The following example creates an applet looks like this:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/calljavascript/simple%20applet%20call%20javascript.png" alt="simple applet call javascript" width="473" height="170" /></p> <p>This applet shows two text fields which allow users entering two numbers. On clicking the <strong>Sum</strong> button, the applet will call a Javascript function to calculate the sum and show result in a message dialog like this:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/calljavascript/sum%20message%20dialog.png" alt="sum message dialog" width="368" height="186" /></p> <p>Code of the applet (<span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">SimpleApplet.java</span>):</p> <pre class="brush:java;toolbar:false">import java.awt.*; import java.awt.event.*; import javax.swing.*; import netscape.javascript.*; /** * A simple Java applet that demonstrates invoking a Javascript method */ public class SimpleApplet extends JApplet { private JTextField textA = new JTextField(5); private JTextField textB = new JTextField(5); private JButton button = new JButton("Sum"); public void init() { // constructs the GUI getContentPane().setLayout(new FlowLayout()); getContentPane().add(textA); getContentPane().add(textB); getContentPane().add(button); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { buttonActionPerformed(evt); } }); } public void buttonActionPerformed(ActionEvent evt) { int numberA = Integer.parseInt(textA.getText()); int numberB = Integer.parseInt(textB.getText()); try { JSObject jsObj = JSObject.getWindow(this); // calls Javascript method and gets return value Object result = jsObj.call("add", new Integer[] {numberA, numberB}); JOptionPane.showMessageDialog(this, "Sum is " + result.toString()); } catch (JSException ex) { ex.printStackTrace(); } } } </pre> <p>&nbsp;</p> <p>Compile the applet as follows:</p> <p style="text-align: center;" align="center"><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">javac -cp JDK_HOME\jre\lib\plugin.jar SimpleApplet.java</span></strong></span></p> <p><strong>NOTE:</strong> Replace <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">JDK_HOME</span><span style="font-size: 12pt; line-height: 115%;"> </span>by the real path on your system.</p> <p>Code of the HTML page (<span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">TestSimpleApplet.html</span>):</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;Test applet calling Javascript function&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;applet id="simpleApplet" code="SimpleApplet.class" width="200" height="50" &gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;script type="text/javascript"&gt; function add(a, b) { return (a + b); } &lt;/script&gt; &lt;/html&gt; </pre> <p>&nbsp;</p> <h2><a id="NumericArguments" name="NumericArguments"></a>3. Passing numeric arguments example</h2> <p style="margin-left: 0in;">Javascript function:</p> <pre class="brush:jscript;toolbar:false">function multiply(x, y) { return x * y; } </pre> <ul> <li>Passing integer numbers: <pre class="brush:java;toolbar:false">Object returnObj = jsObj.call("multiply", new Integer[] {81, 92}); Double result = (Double) returnObj; System.out.println("result is: " + result); </pre> <p>Output: <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">result is 7452.0</span></p> </li> <li>Passing float/double numbers:</li> </ul> <pre class="brush:java;toolbar:false" style="margin-left: 30px;">Object returnObj = jsObj.call("multiply", new Double[] {81.2, 92.3}); Double result = (Double) returnObj; System.out.println("result is: " + result); </pre> <p style="margin-left: 30px;">Output: <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">result is 7494.76</span></p> <p style="margin-left: 30px;">&nbsp;</p> <h2><a id="StringArguments" name="StringArguments"></a>4. Passing String arguments example</h2> <ul> <li>Javascript function: <br /> <pre class="brush:jscript;toolbar:false">function getFullname(first_name, last_name) { return "Hello " + first_name + " " + last_name; } </pre> <p>&nbsp;</p> </li> <li>Java code: <br /> <pre class="brush:java;toolbar:false">String returnValue = (String) jsObj.call("getFullname", new String[] {"Peter", "Smith"}); System.out.println(returnValue); </pre> <p>&nbsp;</p> </li> <li>Output: <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">Hello Peter Smith</span></li> </ul> <p><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"></span></p> <h2><a id="BooleanArguments" name="BooleanArguments"></a>5. Passing boolean arguments example</h2> <ul> <li>Javascript function (set visibility of a div element): <br /> <pre class="brush:jscript;toolbar:false">function setTableVisible(visible) { var tableDiv = document.getElementById("tableDiv"); tableDiv.style.visibility = visible ? "visible" : "hidden"; } </pre> <p>&nbsp;</p> </li> <li>Java code:</li> </ul> <pre class="brush:java;toolbar:false">jsObj.call("setTableVisible", new Boolean[] {false});</pre> <p>&nbsp;</p> <h2><a id="ArrayArgument" name="ArrayArgument"></a>6. Passing array argument example</h2> <ul> <li>Javascript function: <br /> <pre class="brush:jscript;toolbar:false">function sumArray(array_numbers) { var total = 0; var i = 0; for (i = 0; i &lt; array_numbers.length; i++) { total += array_numbers[i]; } return total; } </pre> </li> <li>Java code: <br /> <pre class="brush:java;toolbar:false">int[] numbers = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; Object returnObj = jsObj.call("sumArray", new Object[] {numbers}); Double result = (Double) returnObj; System.out.println("result is: " + result); </pre> </li> <li>Output: <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">result is 55.0</span><br /> <p>&nbsp;</p> </li> </ul> <p style="padding: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"><span style="margin: 0px; padding: 0px; font-family: 'Open Sans', sans-serif; font-size: 18px; font-weight: bold;">Other Java Applet Tutorials:</span></p> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign a Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br style="margin: 0px; padding: 0px;" /></span></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div><div class="feed-description"><p>Java applet can talk to Javascript through the technology called <a href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" rel="nofollow" target="_blank">LiveConnect</a>. In this article, we are going to show you how to write Java code to invoke Javascript function from within Java applet (include passing arguments of various data types and receiving return values).</p> <p><strong>Table of content:</strong></p> <ol> <li style="list-style-type: none;"><ol> <li><a href="#Steps">The steps to invoke Javascript function</a></li> <li><a href="#CompleteExample">A complete example</a></li> <li><a href="#NumericArguments">Passing numeric arguments example</a></li> <li><a href="#StringArguments">Passing String arguments example</a></li> <li><a href="#BooleanArguments">Passing boolean arguments example</a></li> <li><a href="#ArrayArgument">Passing array argument example</a></li> </ol></li> </ol> <h2><a id="Steps" name="Steps"></a>1. The steps to invoke Javascript function</h2> <p>The typical steps to call a Javascript function from a Java applet are as follows:</p> <ul> <li>Import the package <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">netscape.javascript</span>. This package contains only two classes: <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSException</span> and it is provided by the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">plugin.jar</span> library which resides in the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JRE_HOME\lib</span> directory or in <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JDK_HOME\jre\lib</span> directory. So we have to add path of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">plugin.jar</span> file to the compilation classpath.</li> <li>Obtain an instance of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span>class for the applet: <br /> <pre class="brush:java;toolbar:false">JSObject jsObj = JSObject.getWindow(applet); </pre> <p>&nbsp;</p> <p>Where <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">applet</span> is the instance of the applet class which extends from <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">java.applet.Applet </span>class. The <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> class defines principal methods which allow Java applet accessing Javascript variables and methods.</p> </li> <li>Assuming we want to invoke a Javascript method <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">add(a, b)</span> which returns sum of two numbers, write the following code:<br /> <pre class="brush:java;toolbar:false">Object result = jsObj.call("add", new Integer[] {17, 28}); </pre> The <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">call()</span> method’s first parameter is the name of Javascript method, and the second one is an array of <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">Object</span> for the Javascript method’s parameters. The <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">call()</span> method always returns an <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">Object</span> as return value of the invoked method (<span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">null</span> if the Javascript method does not return anything).</li> </ul> <p style="margin-left: 0in;"><strong><span style="font-size: 12pt; line-height: 115%;"></span></strong></p> <p style="margin-left: 0in;"><strong><span style="font-size: 12pt; line-height: 115%;">NOTES:</span></strong><span style="font-size: 12pt; line-height: 115%;"> </span></p> <ul> <li style="list-style-type: none;"> <ul> <li><span style="font-size: 12pt; line-height: 115%;">W</span>hen passing parameters to Javascript method, the Java data types are converted to Javascript equivalents, and the type of return value from Javascript is converted to Java equivalent.</li> <li>All methods of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSObject</span> class throw <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">JSException</span>so we have to catch this exception. <p>&nbsp;</p> </li> </ul> </li> </ul> <h2><a id="CompleteExample" name="CompleteExample"></a>2. A complete Java applet invoking Javascript method example</h2> <p>The following example creates an applet looks like this:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/calljavascript/simple%20applet%20call%20javascript.png" alt="simple applet call javascript" width="473" height="170" /></p> <p>This applet shows two text fields which allow users entering two numbers. On clicking the <strong>Sum</strong> button, the applet will call a Javascript function to calculate the sum and show result in a message dialog like this:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/calljavascript/sum%20message%20dialog.png" alt="sum message dialog" width="368" height="186" /></p> <p>Code of the applet (<span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">SimpleApplet.java</span>):</p> <pre class="brush:java;toolbar:false">import java.awt.*; import java.awt.event.*; import javax.swing.*; import netscape.javascript.*; /** * A simple Java applet that demonstrates invoking a Javascript method */ public class SimpleApplet extends JApplet { private JTextField textA = new JTextField(5); private JTextField textB = new JTextField(5); private JButton button = new JButton("Sum"); public void init() { // constructs the GUI getContentPane().setLayout(new FlowLayout()); getContentPane().add(textA); getContentPane().add(textB); getContentPane().add(button); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { buttonActionPerformed(evt); } }); } public void buttonActionPerformed(ActionEvent evt) { int numberA = Integer.parseInt(textA.getText()); int numberB = Integer.parseInt(textB.getText()); try { JSObject jsObj = JSObject.getWindow(this); // calls Javascript method and gets return value Object result = jsObj.call("add", new Integer[] {numberA, numberB}); JOptionPane.showMessageDialog(this, "Sum is " + result.toString()); } catch (JSException ex) { ex.printStackTrace(); } } } </pre> <p>&nbsp;</p> <p>Compile the applet as follows:</p> <p style="text-align: center;" align="center"><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">javac -cp JDK_HOME\jre\lib\plugin.jar SimpleApplet.java</span></strong></span></p> <p><strong>NOTE:</strong> Replace <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">JDK_HOME</span><span style="font-size: 12pt; line-height: 115%;"> </span>by the real path on your system.</p> <p>Code of the HTML page (<span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">TestSimpleApplet.html</span>):</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;Test applet calling Javascript function&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;applet id="simpleApplet" code="SimpleApplet.class" width="200" height="50" &gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;script type="text/javascript"&gt; function add(a, b) { return (a + b); } &lt;/script&gt; &lt;/html&gt; </pre> <p>&nbsp;</p> <h2><a id="NumericArguments" name="NumericArguments"></a>3. Passing numeric arguments example</h2> <p style="margin-left: 0in;">Javascript function:</p> <pre class="brush:jscript;toolbar:false">function multiply(x, y) { return x * y; } </pre> <ul> <li>Passing integer numbers: <pre class="brush:java;toolbar:false">Object returnObj = jsObj.call("multiply", new Integer[] {81, 92}); Double result = (Double) returnObj; System.out.println("result is: " + result); </pre> <p>Output: <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">result is 7452.0</span></p> </li> <li>Passing float/double numbers:</li> </ul> <pre class="brush:java;toolbar:false" style="margin-left: 30px;">Object returnObj = jsObj.call("multiply", new Double[] {81.2, 92.3}); Double result = (Double) returnObj; System.out.println("result is: " + result); </pre> <p style="margin-left: 30px;">Output: <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">result is 7494.76</span></p> <p style="margin-left: 30px;">&nbsp;</p> <h2><a id="StringArguments" name="StringArguments"></a>4. Passing String arguments example</h2> <ul> <li>Javascript function: <br /> <pre class="brush:jscript;toolbar:false">function getFullname(first_name, last_name) { return "Hello " + first_name + " " + last_name; } </pre> <p>&nbsp;</p> </li> <li>Java code: <br /> <pre class="brush:java;toolbar:false">String returnValue = (String) jsObj.call("getFullname", new String[] {"Peter", "Smith"}); System.out.println(returnValue); </pre> <p>&nbsp;</p> </li> <li>Output: <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">Hello Peter Smith</span></li> </ul> <p><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"></span></p> <h2><a id="BooleanArguments" name="BooleanArguments"></a>5. Passing boolean arguments example</h2> <ul> <li>Javascript function (set visibility of a div element): <br /> <pre class="brush:jscript;toolbar:false">function setTableVisible(visible) { var tableDiv = document.getElementById("tableDiv"); tableDiv.style.visibility = visible ? "visible" : "hidden"; } </pre> <p>&nbsp;</p> </li> <li>Java code:</li> </ul> <pre class="brush:java;toolbar:false">jsObj.call("setTableVisible", new Boolean[] {false});</pre> <p>&nbsp;</p> <h2><a id="ArrayArgument" name="ArrayArgument"></a>6. Passing array argument example</h2> <ul> <li>Javascript function: <br /> <pre class="brush:jscript;toolbar:false">function sumArray(array_numbers) { var total = 0; var i = 0; for (i = 0; i &lt; array_numbers.length; i++) { total += array_numbers[i]; } return total; } </pre> </li> <li>Java code: <br /> <pre class="brush:java;toolbar:false">int[] numbers = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; Object returnObj = jsObj.call("sumArray", new Object[] {numbers}); Double result = (Double) returnObj; System.out.println("result is: " + result); </pre> </li> <li>Output: <span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">result is 55.0</span><br /> <p>&nbsp;</p> </li> </ul> <p style="padding: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"><span style="margin: 0px; padding: 0px; font-family: 'Open Sans', sans-serif; font-size: 18px; font-weight: bold;">Other Java Applet Tutorials:</span></p> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign a Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br style="margin: 0px; padding: 0px;" /></span></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div>How to call Java applet's methods and variables from Javascript2013-02-22T06:12:08-06:002013-02-22T06:12:08-06:00https://codejava.net/java-se/applet/accessing-java-applets-methods-and-variables-from-javascriptNam Ha Minhhainatu@gmail.com<div class="feed-description"><p>Javascript can talk to Java applet in the same HTML page through <a href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" rel="nofollow" target="_blank">LiveConnect</a> technology. We can write Javascript code to invoke methods (including arguments) and access objects which are exposed by the applet. Here are the rules:</p> <ul> <li style="list-style-type: none;"> <ul> <li>Invoking a public method defined in the applet:</li> </ul> </li> </ul> <p style="text-indent: 0.5in; margin-left: 30px;"><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">returnValue = AppletID.appletMethod(arg1, arg2, …)</span></strong></span></p> <ul> <li style="list-style-type: none;"> <ul> <li>Accessing a public variable defined in the applet:</li> </ul> </li> </ul> <p style="text-indent: 0.5in; margin-left: 30px;"><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">returnValue = AppletID.publicVar</span></strong></span></p> <ul> <li style="list-style-type: none;"> <ul> <li>Setting value for the variable:</li> </ul> </li> </ul> <p style="text-indent: 0.5in; margin-left: 30px;"><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">AppletID.publicVar = &lt;value&gt;</span></strong></span></p> <ul> <li style="list-style-type: none;"> <ul> <li>Invoking a public method of the variable of type Object:</li> </ul> </li> </ul> <p style="text-indent: 0.5in; margin-left: 30px;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><span style="color: #800000;">returnValue = AppletID.publicVar.publicMethod(arg1, arg2, …)</span> </span></strong></p> <p>Where <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">AppletID</span><span style="font-size: 10pt; line-height: 115%;"> </span>is the id attribute of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;</span> tag:</p> <p style="text-align: center;" align="center"><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet id="sampleApplet" code="..." /&gt;</span></p> <p><strong><span style="font-size: 12pt; line-height: 115%;">NOTES:</span></strong><span style="font-size: 12pt; line-height: 115%;"> </span></p> <ul> <li style="list-style-type: none;"> <ul> <li>Javascript code can access only public methods and variables.</li> <li>Both static or instance methods/variables can be accessed.</li> </ul> </li> </ul> <p>&nbsp;</p> <h2>1. Javascript call Java Applet Quick Example</h2> <p>Following is a pretty simple example that demonstrates invoking a Java applet’s method from Javascript code. Here is code of the applet (<span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickApplet.java</span>):</p> <pre class="brush:java;toolbar:false">import java.awt.*; import javax.swing.*; public class QuickApplet extends JApplet { private JLabel label = new JLabel("This is a Java applet"); public void init() { setLayout(new FlowLayout()); label.setFont(new Font("Arial", Font.BOLD, 18)); label.setForeground(Color.RED); add(label); } public void drawText(String text) { label.setText(text); } } </pre> <p>This applet shows only label and declare a public method <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">drawText(String)</span> which updates the label’s text.</p> <p>Here is code of the HTML page (<span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickAppletTest.html</span>):</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;Javascript call Applet example&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;input type="button" value="Call Applet" onclick="callApplet();"/&gt; &lt;br/&gt;&lt;br/&gt; &lt;applet id="QuickApplet" code="QuickApplet.class" width="300" height="50" &gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;script type="text/javascript"&gt; function callApplet() { var currentTime = new Date(); var time = currentTime.toISOString(); // invoke drawText() method of the applet and pass time string // as argument: QuickApplet.drawText(time); } &lt;/script&gt; &lt;/html&gt; </pre> <p>This HTML page embeds the above applet and displays a button which will invoke the applet’s method when clicked. The Javascript method <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">callApplet() </span>invokes the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">drawText()</span> method of the applet and passes a time string as an argument. The applet, in turn, updates the label’s text by the string passed from Javascript code. Here is a screenshot of the page:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/js2applet/Javascript%20to%20Applet%20page.png" alt="Javascript to Applet page" width="440" height="196" /></p> <p>&nbsp;</p> <h2>2. Invoking Java applet’s methods</h2> <p>Here are some examples of passing arguments to Java applet’s methods from Javascript code.</p> <p><strong><span style="font-size: 12pt; line-height: 115%;">NOTES:</span></strong></p> <ul> <li style="list-style-type: none;"> <ul> <li>Because variables in Javascript are untyped, so they will be converted to Java equivalents based on signature of Java methods.</li> <li>Return values from Java methods are converted to closest Javascript equivalents (for primitive types) or Javascript wrapper object (for Object types).</li> </ul> </li> <li><strong>Passing numeric arguments:</strong> <p>Code in Java applet:</p> <pre class="brush:java;toolbar:false">public int sum(int x, int y) { return (x + y); } </pre> <br />Code in Javascript:<br /> <pre class="brush:jscript;toolbar:false">var sum = sampleApplet.sum(10, 20); </pre> <p>&nbsp;</p> </li> <li><strong>Passing String arguments:</strong> <p>Code in Java applet:</p> <pre class="brush:java;toolbar:false">public String changeCase(String text) { return text.toUpperCase(); } </pre> <br />Code in Javascript:<br /> <pre class="brush:jscript;toolbar:false">var returnText = sampleApplet.changeCase("code java"); </pre> <br />Numbers are automatically converted to String:<br /> <pre class="brush:java;toolbar:false">var returnText = sampleApplet.changeCase(123456); </pre> &nbsp;</li> <li><strong>Passing boolean arguments:</strong> <p>Code in Java applet:</p> <pre class="brush:java;toolbar:false">public boolean toggleVisible(boolean visible) { return !visible; } </pre> <br />Code in Javascript:<br /> <pre class="brush:jscript;toolbar:false">var booleanReturn = sampleApplet.toggleVisible(true); </pre> <br />Empty string is converted to false, non-empty is converted to true:<br /> <pre class="brush:jscript;toolbar:false">var booleanReturn = sampleApplet.toggleVisible(""); // return true var booleanReturn = sampleApplet.toggleVisible("visible"); // return false </pre> &nbsp;</li> <li><strong>Passing array arguments:</strong><strong><br /></strong></li> </ul> <p style="margin-left: 30px;">Code in Java applet:</p> <pre class="brush:java;toolbar:false">public int sum(int[] numbers) { int sum = 0; for (int i = 0 ; i &lt; numbers.length; i++) { sum += numbers[i]; } return sum; } </pre> <p><br />Code in Javascript:</p> <pre class="brush:jscript;toolbar:false">var numbers = new Array(); numbers[0] = 10; numbers[1] = 20; numbers[2] = 30; var sum = sampleApplet.sum(numbers); </pre> <p>&nbsp;</p> <h2>3. Accessing Java applet’s variables</h2> <p>Javascript code can access only public variables (both instance and static) declared in the applet. If the variable is of type Object, we can invoke methods on the returned object (and pass arguments) like the above section.</p> <ul> <li><strong>Access primitive variables:</strong> <p>Code in Java applet:</p> <pre class="brush:java;toolbar:false">public int number; </pre> <br />Code in Javascript:<br /> <pre class="brush:jscript;toolbar:false">sampleApplet.number = 10; </pre> <p>&nbsp;</p> </li> <li><strong>Access Object variables:</strong></li> </ul> <p style="margin-left: 30px;">Code in Java applet:</p> <pre class="brush:java;toolbar:false">public String email; </pre> <p style="margin-left: 30px;"><br />Code in Javascript:</p> <pre class="brush:java;toolbar:false">var email = sampleApplet.email; email = email.substring(5, 18); email = "info@codejava.net"; email = email.toUpperCase(); </pre> <p style="text-indent: 0.5in;">In this example, we obtain a String object from the applet and call String’s <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">substring(int, int) </span>and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">toUpperCase()</span> methods. The similar can be applied for other Object types.</p> <h3 style="padding: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;">&nbsp;</h3> <p style="padding: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"><span style="margin: 0px; padding: 0px; font-family: 'Open Sans', sans-serif; font-size: 18px; font-weight: bold;">Other Java Applet Tutorials:</span></p> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/quick-start-with-java-applet" target="_blank"><span>Java Applet Tutorial for beginners</span></a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank"><span>How to show Java applet in HTML page</span></a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-sign-a-java-applet" target="_blank"><span>How to sign a Java applet</span></a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/call-javascript-function-from-java-applet" target="_blank"><span>How to call Javascript function from Java applet</span></a></li> <li style="margin: 0px; padding: 0px;"><span><a href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br /></span></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/submitting-html-form-in-java-applet" target="_blank"><span>How to submitt HTML form in Java applet</span></a></li> <li style="margin: 0px; padding: 0px;"><span><a href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div><div class="feed-description"><p>Javascript can talk to Java applet in the same HTML page through <a href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" rel="nofollow" target="_blank">LiveConnect</a> technology. We can write Javascript code to invoke methods (including arguments) and access objects which are exposed by the applet. Here are the rules:</p> <ul> <li style="list-style-type: none;"> <ul> <li>Invoking a public method defined in the applet:</li> </ul> </li> </ul> <p style="text-indent: 0.5in; margin-left: 30px;"><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">returnValue = AppletID.appletMethod(arg1, arg2, …)</span></strong></span></p> <ul> <li style="list-style-type: none;"> <ul> <li>Accessing a public variable defined in the applet:</li> </ul> </li> </ul> <p style="text-indent: 0.5in; margin-left: 30px;"><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">returnValue = AppletID.publicVar</span></strong></span></p> <ul> <li style="list-style-type: none;"> <ul> <li>Setting value for the variable:</li> </ul> </li> </ul> <p style="text-indent: 0.5in; margin-left: 30px;"><span style="color: #800000;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';">AppletID.publicVar = &lt;value&gt;</span></strong></span></p> <ul> <li style="list-style-type: none;"> <ul> <li>Invoking a public method of the variable of type Object:</li> </ul> </li> </ul> <p style="text-indent: 0.5in; margin-left: 30px;"><strong><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New';"><span style="color: #800000;">returnValue = AppletID.publicVar.publicMethod(arg1, arg2, …)</span> </span></strong></p> <p>Where <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">AppletID</span><span style="font-size: 10pt; line-height: 115%;"> </span>is the id attribute of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;</span> tag:</p> <p style="text-align: center;" align="center"><span style="font-size: 9pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet id="sampleApplet" code="..." /&gt;</span></p> <p><strong><span style="font-size: 12pt; line-height: 115%;">NOTES:</span></strong><span style="font-size: 12pt; line-height: 115%;"> </span></p> <ul> <li style="list-style-type: none;"> <ul> <li>Javascript code can access only public methods and variables.</li> <li>Both static or instance methods/variables can be accessed.</li> </ul> </li> </ul> <p>&nbsp;</p> <h2>1. Javascript call Java Applet Quick Example</h2> <p>Following is a pretty simple example that demonstrates invoking a Java applet’s method from Javascript code. Here is code of the applet (<span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickApplet.java</span>):</p> <pre class="brush:java;toolbar:false">import java.awt.*; import javax.swing.*; public class QuickApplet extends JApplet { private JLabel label = new JLabel("This is a Java applet"); public void init() { setLayout(new FlowLayout()); label.setFont(new Font("Arial", Font.BOLD, 18)); label.setForeground(Color.RED); add(label); } public void drawText(String text) { label.setText(text); } } </pre> <p>This applet shows only label and declare a public method <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">drawText(String)</span> which updates the label’s text.</p> <p>Here is code of the HTML page (<span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickAppletTest.html</span>):</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;Javascript call Applet example&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;input type="button" value="Call Applet" onclick="callApplet();"/&gt; &lt;br/&gt;&lt;br/&gt; &lt;applet id="QuickApplet" code="QuickApplet.class" width="300" height="50" &gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;script type="text/javascript"&gt; function callApplet() { var currentTime = new Date(); var time = currentTime.toISOString(); // invoke drawText() method of the applet and pass time string // as argument: QuickApplet.drawText(time); } &lt;/script&gt; &lt;/html&gt; </pre> <p>This HTML page embeds the above applet and displays a button which will invoke the applet’s method when clicked. The Javascript method <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">callApplet() </span>invokes the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">drawText()</span> method of the applet and passes a time string as an argument. The applet, in turn, updates the label’s text by the string passed from Javascript code. Here is a screenshot of the page:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/js2applet/Javascript%20to%20Applet%20page.png" alt="Javascript to Applet page" width="440" height="196" /></p> <p>&nbsp;</p> <h2>2. Invoking Java applet’s methods</h2> <p>Here are some examples of passing arguments to Java applet’s methods from Javascript code.</p> <p><strong><span style="font-size: 12pt; line-height: 115%;">NOTES:</span></strong></p> <ul> <li style="list-style-type: none;"> <ul> <li>Because variables in Javascript are untyped, so they will be converted to Java equivalents based on signature of Java methods.</li> <li>Return values from Java methods are converted to closest Javascript equivalents (for primitive types) or Javascript wrapper object (for Object types).</li> </ul> </li> <li><strong>Passing numeric arguments:</strong> <p>Code in Java applet:</p> <pre class="brush:java;toolbar:false">public int sum(int x, int y) { return (x + y); } </pre> <br />Code in Javascript:<br /> <pre class="brush:jscript;toolbar:false">var sum = sampleApplet.sum(10, 20); </pre> <p>&nbsp;</p> </li> <li><strong>Passing String arguments:</strong> <p>Code in Java applet:</p> <pre class="brush:java;toolbar:false">public String changeCase(String text) { return text.toUpperCase(); } </pre> <br />Code in Javascript:<br /> <pre class="brush:jscript;toolbar:false">var returnText = sampleApplet.changeCase("code java"); </pre> <br />Numbers are automatically converted to String:<br /> <pre class="brush:java;toolbar:false">var returnText = sampleApplet.changeCase(123456); </pre> &nbsp;</li> <li><strong>Passing boolean arguments:</strong> <p>Code in Java applet:</p> <pre class="brush:java;toolbar:false">public boolean toggleVisible(boolean visible) { return !visible; } </pre> <br />Code in Javascript:<br /> <pre class="brush:jscript;toolbar:false">var booleanReturn = sampleApplet.toggleVisible(true); </pre> <br />Empty string is converted to false, non-empty is converted to true:<br /> <pre class="brush:jscript;toolbar:false">var booleanReturn = sampleApplet.toggleVisible(""); // return true var booleanReturn = sampleApplet.toggleVisible("visible"); // return false </pre> &nbsp;</li> <li><strong>Passing array arguments:</strong><strong><br /></strong></li> </ul> <p style="margin-left: 30px;">Code in Java applet:</p> <pre class="brush:java;toolbar:false">public int sum(int[] numbers) { int sum = 0; for (int i = 0 ; i &lt; numbers.length; i++) { sum += numbers[i]; } return sum; } </pre> <p><br />Code in Javascript:</p> <pre class="brush:jscript;toolbar:false">var numbers = new Array(); numbers[0] = 10; numbers[1] = 20; numbers[2] = 30; var sum = sampleApplet.sum(numbers); </pre> <p>&nbsp;</p> <h2>3. Accessing Java applet’s variables</h2> <p>Javascript code can access only public variables (both instance and static) declared in the applet. If the variable is of type Object, we can invoke methods on the returned object (and pass arguments) like the above section.</p> <ul> <li><strong>Access primitive variables:</strong> <p>Code in Java applet:</p> <pre class="brush:java;toolbar:false">public int number; </pre> <br />Code in Javascript:<br /> <pre class="brush:jscript;toolbar:false">sampleApplet.number = 10; </pre> <p>&nbsp;</p> </li> <li><strong>Access Object variables:</strong></li> </ul> <p style="margin-left: 30px;">Code in Java applet:</p> <pre class="brush:java;toolbar:false">public String email; </pre> <p style="margin-left: 30px;"><br />Code in Javascript:</p> <pre class="brush:java;toolbar:false">var email = sampleApplet.email; email = email.substring(5, 18); email = "info@codejava.net"; email = email.toUpperCase(); </pre> <p style="text-indent: 0.5in;">In this example, we obtain a String object from the applet and call String’s <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">substring(int, int) </span>and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">toUpperCase()</span> methods. The similar can be applied for other Object types.</p> <h3 style="padding: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;">&nbsp;</h3> <p style="padding: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"><span style="margin: 0px; padding: 0px; font-family: 'Open Sans', sans-serif; font-size: 18px; font-weight: bold;">Other Java Applet Tutorials:</span></p> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/quick-start-with-java-applet" target="_blank"><span>Java Applet Tutorial for beginners</span></a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank"><span>How to show Java applet in HTML page</span></a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-sign-a-java-applet" target="_blank"><span>How to sign a Java applet</span></a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/call-javascript-function-from-java-applet" target="_blank"><span>How to call Javascript function from Java applet</span></a></li> <li style="margin: 0px; padding: 0px;"><span><a href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br /></span></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/submitting-html-form-in-java-applet" target="_blank"><span>How to submitt HTML form in Java applet</span></a></li> <li style="margin: 0px; padding: 0px;"><span><a href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div>How to submit HTML form in Java applet2013-02-19T09:59:04-06:002013-02-19T09:59:04-06:00https://codejava.net/java-se/applet/submitting-html-form-in-java-appletNam Ha Minhhainatu@gmail.com<div class="feed-description"><p>There would be some cases in which we need to submit an HTML form from within a Java applet. The applet does some tasks and then needs to submit the form in the enclosing HTML page. To do so, we would utilize the capability of <a href="java-se/applet/call-javascript-function-from-java-applet">communication between Java applet and Javascript</a> through the <a href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" rel="nofollow" target="_blank">LiveConnect</a> technology as follows:</p> <ul> <li>In the HTML page, write a Javascript function that contains code to submit the form. For example: <br /> <pre class="brush:jscript;toolbar:false">function submitForm() { // do some processing submit the form... document.forms[0].submit(); } </pre> <p>That will submit the first form in the HTML document.</p> </li> <li>In the applet, invoke the Javascript’s <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">submitForm()</span> function like this:</li> </ul> <pre class="brush:java;toolbar:false">try { JSObject jsObj = JSObject.getWindow(this); jsObj.call("submitForm", null); } catch (JSException ex) { ex.printStackTrace(); } </pre> <p>&nbsp;</p> <p>We may want to pass something from the Java applet to Javascript: the Javascript method takes some parameters as follows:</p> <pre class="brush:jscript;toolbar:false">function submitForm(param1, param2) { // do something with the params and submit the form... document.forms[0].submit(); } </pre> <p>Then modify the call in Java side as follows:</p> <pre class="brush:java;toolbar:false">try { JSObject jsObj = JSObject.getWindow(this); jsObj.call("submitForm", new String[] {"param1", "param2"}); } catch (JSException ex) { ex.printStackTrace(); } </pre> <p>That passes two String arguments “param1” and “param2” to the Javascript method.&nbsp;</p> <p>Following is complete code of the sample HTML page:</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;Submitting HTML form in Java applet&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;!-- show the applet --&gt; &lt;applet id="SampleApplet" code="SampleApplet.class" width="200" height="50" &gt; &lt;/applet&gt; &lt;!-- show HTML form --&gt; &lt;form method="POST" action="http://localhost:8080/SampleApp/process"&gt; Enter Full Name: &lt;input type="text" name="fullname" size="30"/&gt; &lt;br/&gt; Enter E-mail: &lt;input type="text" name="email" size="30"/&gt; &lt;/form&gt; &lt;/center&gt; &lt;/body&gt; &lt;script type="text/javascript"&gt; function submitForm() { // do some processing submit the form... document.forms[0].submit(); } &lt;/script&gt; &lt;/html&gt; </pre> <p>This HTML page displays a Java applet with only a button, along with an HTML form with two text fields.</p> <p>&nbsp;</p> <p>And here is complete code of the sample applet:</p> <pre class="brush:java;toolbar:false">import java.awt.*; import java.awt.event.*; import javax.swing.*; import netscape.javascript.*; /** * A sample Java applet that demonstrates how to call Javascript in order to * submit the form in the enclosing HTML page. */ public class SampleApplet extends JApplet { private JButton button = new JButton("Submit"); public void init() { getContentPane().setLayout(new FlowLayout()); getContentPane().add(button); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { buttonActionPerformed(evt); } }); } public void buttonActionPerformed(ActionEvent evt) { try { JSObject jsObj = JSObject.getWindow(this); jsObj.call("submitForm", null); } catch (JSException ex) { ex.printStackTrace(); } } } </pre> <p>This applet simply displays a button which will invoke the Javascript function when clicked.</p> <p>Opening the page <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">SampleAppletTest.html</span> in browser:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/submitform/applet%20html%20form%20submit.png" alt="applet html form submit" width="500" height="191" /></p> <p>Click the <strong>Submit</strong> button, values of the two text fields in the form will be submitted to the URL specified by the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">action</span> attribute of <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;form&gt;</span> element.</p> <p>&nbsp;</p> <h3 style="padding: 0px; font-family: 'Open Sans', sans-serif; color: #333333;"><span style="margin: 0px; padding: 0px; font-family: Arial, Helvetica, sans-serif;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a></span></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div><div class="feed-description"><p>There would be some cases in which we need to submit an HTML form from within a Java applet. The applet does some tasks and then needs to submit the form in the enclosing HTML page. To do so, we would utilize the capability of <a href="java-se/applet/call-javascript-function-from-java-applet">communication between Java applet and Javascript</a> through the <a href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" rel="nofollow" target="_blank">LiveConnect</a> technology as follows:</p> <ul> <li>In the HTML page, write a Javascript function that contains code to submit the form. For example: <br /> <pre class="brush:jscript;toolbar:false">function submitForm() { // do some processing submit the form... document.forms[0].submit(); } </pre> <p>That will submit the first form in the HTML document.</p> </li> <li>In the applet, invoke the Javascript’s <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">submitForm()</span> function like this:</li> </ul> <pre class="brush:java;toolbar:false">try { JSObject jsObj = JSObject.getWindow(this); jsObj.call("submitForm", null); } catch (JSException ex) { ex.printStackTrace(); } </pre> <p>&nbsp;</p> <p>We may want to pass something from the Java applet to Javascript: the Javascript method takes some parameters as follows:</p> <pre class="brush:jscript;toolbar:false">function submitForm(param1, param2) { // do something with the params and submit the form... document.forms[0].submit(); } </pre> <p>Then modify the call in Java side as follows:</p> <pre class="brush:java;toolbar:false">try { JSObject jsObj = JSObject.getWindow(this); jsObj.call("submitForm", new String[] {"param1", "param2"}); } catch (JSException ex) { ex.printStackTrace(); } </pre> <p>That passes two String arguments “param1” and “param2” to the Javascript method.&nbsp;</p> <p>Following is complete code of the sample HTML page:</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;Submitting HTML form in Java applet&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;!-- show the applet --&gt; &lt;applet id="SampleApplet" code="SampleApplet.class" width="200" height="50" &gt; &lt;/applet&gt; &lt;!-- show HTML form --&gt; &lt;form method="POST" action="http://localhost:8080/SampleApp/process"&gt; Enter Full Name: &lt;input type="text" name="fullname" size="30"/&gt; &lt;br/&gt; Enter E-mail: &lt;input type="text" name="email" size="30"/&gt; &lt;/form&gt; &lt;/center&gt; &lt;/body&gt; &lt;script type="text/javascript"&gt; function submitForm() { // do some processing submit the form... document.forms[0].submit(); } &lt;/script&gt; &lt;/html&gt; </pre> <p>This HTML page displays a Java applet with only a button, along with an HTML form with two text fields.</p> <p>&nbsp;</p> <p>And here is complete code of the sample applet:</p> <pre class="brush:java;toolbar:false">import java.awt.*; import java.awt.event.*; import javax.swing.*; import netscape.javascript.*; /** * A sample Java applet that demonstrates how to call Javascript in order to * submit the form in the enclosing HTML page. */ public class SampleApplet extends JApplet { private JButton button = new JButton("Submit"); public void init() { getContentPane().setLayout(new FlowLayout()); getContentPane().add(button); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { buttonActionPerformed(evt); } }); } public void buttonActionPerformed(ActionEvent evt) { try { JSObject jsObj = JSObject.getWindow(this); jsObj.call("submitForm", null); } catch (JSException ex) { ex.printStackTrace(); } } } </pre> <p>This applet simply displays a button which will invoke the Javascript function when clicked.</p> <p>Opening the page <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">SampleAppletTest.html</span> in browser:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/submitform/applet%20html%20form%20submit.png" alt="applet html form submit" width="500" height="191" /></p> <p>Click the <strong>Submit</strong> button, values of the two text fields in the form will be submitted to the URL specified by the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">action</span> attribute of <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">&lt;form&gt;</span> element.</p> <p>&nbsp;</p> <h3 style="padding: 0px; font-family: 'Open Sans', sans-serif; color: #333333;"><span style="margin: 0px; padding: 0px; font-family: Arial, Helvetica, sans-serif;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a></span></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div>How to resize Java applet to fit browser's window2013-02-20T06:50:43-06:002013-02-20T06:50:43-06:00https://codejava.net/java-se/applet/resizing-java-applet-to-fit-browsers-windowNam Ha Minhhainatu@gmail.com<div class="feed-description"><p>Generally, when embedding a Java applet into an HTML page, the size of the applet is determined by two attributes <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">width&nbsp;</span>and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">height</span> of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;</span> tag. For example:</p> <pre class="brush:xml;toolbar:false">&lt;applet id="myApplet" code="MyApplet.class" width="640" height="480" &gt; &lt;/applet&gt; </pre> <p>That code will set the applet’s size to 640 by 480 pixels. However that size is fixed, so when users resize their browser’s window, the applet’s size does not get updated accordingly.</p> <p>To get the applet resized automatically when the users resize browser’s window, we can use relative value (percentage) for the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">width&nbsp;</span>and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">height</span> attributes. For example:</p> <pre class="brush:xml;toolbar:false">&lt;applet id="myApplet" code="MyApplet.class" width="80%" height="80%" &gt; &lt;/applet&gt; </pre> <p>That will set the applet’s size about 80 percent of the browser’s size. So when the browser’s window is being resized, the applet’s size gets updated accordingly (so the specified percentage is always kept). If we want the applet fits the display area in browser’s window, use the maximum percentage value:</p> <pre class="brush:xml;toolbar:false">width="100%" height="100%" </pre> <p>Following is code of the sample HTML page:</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;Resizable Java applet&lt;/title&gt; &lt;/head&gt; &lt;body top="0" left="0"&gt; &lt;center&gt; &lt;applet id="ResizableApplet" code="ResizableApplet.class" width="100%" height="100%" &gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;/html&gt; </pre> <p>And code of the sample applet:</p> <pre class="brush:java;toolbar:false">import java.awt.*; import javax.swing.*; public class ResizableApplet extends JApplet { public void init() { getContentPane().setBackground(Color.GREEN); } } </pre> <p>This applet simply shows a green background like this:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/resize/resizable%20applet.png" alt="resizable applet" width="460" height="304" /></p> <p>Try to resize the browser’s window and we’ll see the applet get resized accordingly.</p> <p>&nbsp;</p> <h3 style="padding: 0px; font-family: 'Open Sans', sans-serif; color: #333333;"><span style="margin: 0px; padding: 0px; font-family: Arial, Helvetica, sans-serif;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div><div class="feed-description"><p>Generally, when embedding a Java applet into an HTML page, the size of the applet is determined by two attributes <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">width&nbsp;</span>and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">height</span> of the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;</span> tag. For example:</p> <pre class="brush:xml;toolbar:false">&lt;applet id="myApplet" code="MyApplet.class" width="640" height="480" &gt; &lt;/applet&gt; </pre> <p>That code will set the applet’s size to 640 by 480 pixels. However that size is fixed, so when users resize their browser’s window, the applet’s size does not get updated accordingly.</p> <p>To get the applet resized automatically when the users resize browser’s window, we can use relative value (percentage) for the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">width&nbsp;</span>and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">height</span> attributes. For example:</p> <pre class="brush:xml;toolbar:false">&lt;applet id="myApplet" code="MyApplet.class" width="80%" height="80%" &gt; &lt;/applet&gt; </pre> <p>That will set the applet’s size about 80 percent of the browser’s size. So when the browser’s window is being resized, the applet’s size gets updated accordingly (so the specified percentage is always kept). If we want the applet fits the display area in browser’s window, use the maximum percentage value:</p> <pre class="brush:xml;toolbar:false">width="100%" height="100%" </pre> <p>Following is code of the sample HTML page:</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;Resizable Java applet&lt;/title&gt; &lt;/head&gt; &lt;body top="0" left="0"&gt; &lt;center&gt; &lt;applet id="ResizableApplet" code="ResizableApplet.class" width="100%" height="100%" &gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;/html&gt; </pre> <p>And code of the sample applet:</p> <pre class="brush:java;toolbar:false">import java.awt.*; import javax.swing.*; public class ResizableApplet extends JApplet { public void init() { getContentPane().setBackground(Color.GREEN); } } </pre> <p>This applet simply shows a green background like this:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/resize/resizable%20applet.png" alt="resizable applet" width="460" height="304" /></p> <p>Try to resize the browser’s window and we’ll see the applet get resized accordingly.</p> <p>&nbsp;</p> <h3 style="padding: 0px; font-family: 'Open Sans', sans-serif; color: #333333;"><span style="margin: 0px; padding: 0px; font-family: Arial, Helvetica, sans-serif;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/quick-start-with-java-applet" target="_blank">Java Applet Tutorial for beginners</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div>Java applet tutorial for beginners2013-01-12T10:21:41-06:002013-01-12T10:21:41-06:00https://codejava.net/java-se/applet/quick-start-with-java-appletNam Ha Minhhainatu@gmail.com<div class="feed-description"><p>If you are new to Java applet, this tutorial let you quickly get started with a simple applet from writing code and packaging jar file to embedding in HTML page and running in a browser.</p> <p>&nbsp;</p> <h2>1. Code a Java applet</h2> <p>A Java applet class must extends from <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">java.applet.Applet</span><span style="font-size: 10pt; line-height: 115%;"> </span>class or <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">javax.swing.JApplet</span> class and overrides applet’s life cycle methods: <span style="color: #800000;"><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">init()</span><span style="color: #000000;">,</span> </span><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">start()</span>, <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">stop()</span> and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';"><span style="color: #800000;">destroy()</span>.</span> Following is code of a simple Java applet that displays only a button “<i>Click me!</i>”. On clicking the button, a message dialog says “<i>Hello! I am an applet!</i>” appears.</p> <pre class="brush:java;toolbar:false">package net.codejava.applet; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JOptionPane; public class QuickApplet extends JApplet { private JButton button; public void init() { button = new JButton("Click me!"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { JOptionPane.showMessageDialog(QuickApplet.this, "Hello! I am an applet!"); } }); System.out.println("APPLET IS INITIALIZED"); } public void start() { getContentPane().add(button); System.out.println("APPLET IS STARTED"); } public void stop() { System.out.println("APPLET IS STOPPED"); } public void destroy() { System.out.println("APPLET IS DESTROYED"); } } </pre> <p>Place the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickApplet.java</span> file under the directory structure: <i>src\net\codejava\applet</i></p> <p>&nbsp;</p> <h2>2. Compile and package Java applet</h2> <p>Create a directory called <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">build</span> in the same directory as the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">src</span> directory. Suppose the current working directory is the parent of the directories <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">build</span> and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">src</span>, type the following command to compile the applet:</p> <p style="text-align: center;" align="center"><strong><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">javac -d build src\net\codejava\applet\QuickApplet.java</span></strong></p> <p>The compiled <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">.class</span> files will be placed under the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">build</span> directory. Type the following command to package the applet (not that there is a period at the end):</p> <p style="text-align: center;" align="center"><strong><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">jar cvf QuickApplet.jar -C build .</span></strong></p> <p>That will add all classes in the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">build</span> directory to a single jar file named <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickApplet.jar</span>.</p> <p>&nbsp;</p> <h2>3. Embed Java applet in HTML page</h2> <p>Now create an HTML file called <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickApplet.html</span> with the following code:</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;Quick Start Java Applet&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;applet code="net.codejava.applet.QuickApplet.class" archive="QuickApplet.jar" width="125" height="125" &gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;/html&gt; </pre> <p>We use to embed the applet in the HTML page. See the article <a href="java-se/applet/how-to-show-java-applet-in-html-page">How to show Java applet in HTML page</a> for more details about using the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;</span> tag.</p> <p>&nbsp;</p> <h2>4. Run Java applet in browser</h2> <p>Open the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickApplet.html</span> file in a Java Plug-in enabled browser:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/quickstart/QuickApplet.png" alt="QuickApplet" width="490" height="242" /></p> <p>Click on the button, a message dialog appears:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/quickstart/Applet%20message%20dialog.png" alt="Applet message dialog" width="491" height="245" /></p> <p>Note that a dialog message created by Java applet has an exclamation mark in the upper right corner.</p> <p>And following is logging information from Java applet console:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/quickstart/Java%20applet%20console.png" alt="Java applet console" width="450" height="397" /></p> <p>Download the quick applet project in the attachment section.</p> <p>&nbsp;</p> <h3 style="padding: 0px; font-family: 'Open Sans', sans-serif; color: #333333;"><span style="margin: 0px; padding: 0px; font-family: Arial, Helvetica, sans-serif;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br style="margin: 0px; padding: 0px;" /></span></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div><div class="feed-description"><p>If you are new to Java applet, this tutorial let you quickly get started with a simple applet from writing code and packaging jar file to embedding in HTML page and running in a browser.</p> <p>&nbsp;</p> <h2>1. Code a Java applet</h2> <p>A Java applet class must extends from <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">java.applet.Applet</span><span style="font-size: 10pt; line-height: 115%;"> </span>class or <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">javax.swing.JApplet</span> class and overrides applet’s life cycle methods: <span style="color: #800000;"><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">init()</span><span style="color: #000000;">,</span> </span><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">start()</span>, <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">stop()</span> and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';"><span style="color: #800000;">destroy()</span>.</span> Following is code of a simple Java applet that displays only a button “<i>Click me!</i>”. On clicking the button, a message dialog says “<i>Hello! I am an applet!</i>” appears.</p> <pre class="brush:java;toolbar:false">package net.codejava.applet; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JOptionPane; public class QuickApplet extends JApplet { private JButton button; public void init() { button = new JButton("Click me!"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { JOptionPane.showMessageDialog(QuickApplet.this, "Hello! I am an applet!"); } }); System.out.println("APPLET IS INITIALIZED"); } public void start() { getContentPane().add(button); System.out.println("APPLET IS STARTED"); } public void stop() { System.out.println("APPLET IS STOPPED"); } public void destroy() { System.out.println("APPLET IS DESTROYED"); } } </pre> <p>Place the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickApplet.java</span> file under the directory structure: <i>src\net\codejava\applet</i></p> <p>&nbsp;</p> <h2>2. Compile and package Java applet</h2> <p>Create a directory called <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">build</span> in the same directory as the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">src</span> directory. Suppose the current working directory is the parent of the directories <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">build</span> and <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">src</span>, type the following command to compile the applet:</p> <p style="text-align: center;" align="center"><strong><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">javac -d build src\net\codejava\applet\QuickApplet.java</span></strong></p> <p>The compiled <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New';">.class</span> files will be placed under the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">build</span> directory. Type the following command to package the applet (not that there is a period at the end):</p> <p style="text-align: center;" align="center"><strong><span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">jar cvf QuickApplet.jar -C build .</span></strong></p> <p>That will add all classes in the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">build</span> directory to a single jar file named <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickApplet.jar</span>.</p> <p>&nbsp;</p> <h2>3. Embed Java applet in HTML page</h2> <p>Now create an HTML file called <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickApplet.html</span> with the following code:</p> <pre class="brush:xml;toolbar:false">&lt;html&gt; &lt;head&gt; &lt;title&gt;Quick Start Java Applet&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;center&gt; &lt;applet code="net.codejava.applet.QuickApplet.class" archive="QuickApplet.jar" width="125" height="125" &gt; &lt;/applet&gt; &lt;/center&gt; &lt;/body&gt; &lt;/html&gt; </pre> <p>We use to embed the applet in the HTML page. See the article <a href="java-se/applet/how-to-show-java-applet-in-html-page">How to show Java applet in HTML page</a> for more details about using the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">&lt;applet&gt;</span> tag.</p> <p>&nbsp;</p> <h2>4. Run Java applet in browser</h2> <p>Open the <span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: #800000;">QuickApplet.html</span> file in a Java Plug-in enabled browser:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/quickstart/QuickApplet.png" alt="QuickApplet" width="490" height="242" /></p> <p>Click on the button, a message dialog appears:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/quickstart/Applet%20message%20dialog.png" alt="Applet message dialog" width="491" height="245" /></p> <p>Note that a dialog message created by Java applet has an exclamation mark in the upper right corner.</p> <p>And following is logging information from Java applet console:</p> <p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="images/articles/javase/applet/quickstart/Java%20applet%20console.png" alt="Java applet console" width="450" height="397" /></p> <p>Download the quick applet project in the attachment section.</p> <p>&nbsp;</p> <h3 style="padding: 0px; font-family: 'Open Sans', sans-serif; color: #333333;"><span style="margin: 0px; padding: 0px; font-family: Arial, Helvetica, sans-serif;">Other Java Applet Tutorials:</span></h3> <ul style="font-family: Arial, Helvetica, sans-serif; font-size: 14.3px;"> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/how-to-show-java-applet-in-html-page" target="_blank">How to show Java applet in HTML page</a></li> <li style="margin: 0px; padding: 0px;"><a href="java-se/applet/how-to-sign-a-java-applet" target="_blank">How to sign Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/call-javascript-function-from-java-applet" target="_blank">How to call Javascript function from Java applet</a></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/accessing-java-applets-methods-and-variables-from-javascript" target="_blank">How to call Java applet's methods and variables from Javascript</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/resizing-java-applet-to-fit-browsers-window" target="_blank">How to resize Java applet to fit browser's window</a><br style="margin: 0px; padding: 0px;" /></span></li> <li style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/submitting-html-form-in-java-applet" target="_blank">How to submitt HTML form in Java applet</a></li> <li style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><a style="margin: 0px; padding: 0px; color: #095197; cursor: pointer;" href="java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript" target="_blank">LiveConnect - The API for communication between Java applet and Javascript</a></span></li> </ul></div>