Re: AppletContext.getApplets bug
On Sun, 13 Apr 2014 00:17:08 -0700, Roedy Green
<see_website@mindprod.com.invalid> wrote, quoted or indirectly quoted
someone who said :
I suspect that in the old days all applets on a page were visible, but
now there are several independent pools of applets where the number of
instances gets large, so no longer can any one applet see everything.
I have written an SSCCE and discovered that getApplets fails when
there are 12 or more instances on a page, at least in the Firefox
browser on Windows 7 64 bit.
Here is the proof:
/*
* [MultiInstance]
*
* Summary: Demonstrate AppletContext.getApplets bug which fails for
more than 11 instances
*
* Copyright: (c) 2014 Roedy Green, Canadian Mind Products,
http://mindprod.com
*
* Licence: This software may be copied and used freely for any
purpose but military.
* http://mindprod.com/contact/nonmil.html
*
* Requires: JDK 1.7+
*
* Created with: JetBrains IntelliJ IDEA IDE
http://www.jetbrains.com/idea/
*
* Version History:
* 1.0 2001-03-08 initial
*/
package com.mindprod.example;
import javax.swing.JApplet;
import javax.swing.JButton;
import java.applet.Applet;
import java.applet.AppletContext;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import static java.lang.System.out;
// simple jar build: jar -cvfm multi.jar manifest.mf
\com\mindprod\example\MultiInstance*.class
// manifest.mf looks like this:
// Manifest-Version: 1.0
// Application-Name: MultiInstance
// Permissions: sandbox
// Created-By: 1.8.0 (Oracle Corporation)
// Main-Class: com.mindprod.example.MultiInstance
// run with multi.html
//that looks like this:
// <!DOCTYPE HTML>
// <html lang="en-CA">
// <head>
// <meta charset="utf-8">
// </head>
// <body>
// <p>Click each applet to see which others it can see, listed
on the console.</p>
//
// <object type="application/x-java-applet" data="multi.jar"
width="40" height="20">
// <param name="code"
value="com.mindprod.example.MultiInstance">
// <param name="archive" value="multi.jar">
// <param name="instance" value="1"> <!-- unique instance
identifier -->
// Applet failed to run.
// </object>
//
// <object type="application/x-java-applet" data="multi.jar"
width="40" height="20">
// <param name="code"
value="com.mindprod.example.MultiInstance">
// <param name="archive" value="multi.jar">
// <param name="instance" value="2">
// Applet failed to run.
// </object>
// ... 11 instances will work, 12 will fail.
// </body>
// </html>
/**
* Demonstrate AppletContext.getApplets bug which fails for more than
11 instances
*
* @author Roedy Green, Canadian Mind Products
* @version 1.0 2014-04-12 initial version
* @since 2014-04-12
*/
public final class MultiInstance extends JApplet
{
// ------------------------------ CONSTANTS
------------------------------
/**
* which instance on the page are we, unique string
*/
private String instance = "unknown";
// -------------------------- PUBLIC INSTANCE METHODS
--------------------------
/**
* constructor
*/
public MultiInstance()
{
}
/**
* dump out who can see what
*/
public void dump()
{
// dump out what getApplets provides
final AppletContext ac = this.getAppletContext();
// all Applets on page, possibly including us, including
non-MultiInstance
final Enumeration<Applet> otherApplets = ac.getApplets();
if ( otherApplets == null || !otherApplets.hasMoreElements() )
{
out.println( "instance " + instance + " unable to see any
other applets" );
}
else
{
while ( otherApplets.hasMoreElements() )
{
Applet other = otherApplets.nextElement();
if ( other instanceof MultiInstance )
{
out.println( instance + " can see: instance " + (
( MultiInstance ) other ).getInstance() );
}
else
{
out.println( instance + " can see: " +
other.getAppletInfo() );
}
}
}
}
public void init()
{
instance = getParameter( "instance" );
JButton t = new JButton( instance );
t.setBackground( Color.orange );
this.add( t );
t.addActionListener( new ActionListener()
{
/**
* Invoked when user clicks button
*/
public void actionPerformed( ActionEvent e )
{
dump();
}
} );
this.validate();
this.setVisible( true );
}// end init
// -------------------------- OTHER METHODS
--------------------------
/**
* which instance on the page are
*
* @return unique instance string
*/
String getInstance()
{
return instance;
}
// has no main method.
}
--
Roedy Green Canadian Mind Products http://mindprod.com
"Don't worry about people stealing an idea; if it's original, you'll
have to shove it down their throats."
~ Howard Aiken (born: 1900-03-08 died: 1973-03-14 at age: 73)