Java7 Applet Status and Event Handlers

Discussion in 'Java' started by Richard Maher, Apr 26, 2012.

  1. Hi,

    I found the following pages and find them very interesting and useful: -
    http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/applet/appletStatus.html
    http://docs.oracle.com/javase/tutorial/deployment/applet/appletStatus.html
    a good example of use: -
    http://docs.oracle.com/javase/tutor...dCallback/AppletPageUpdatedDuringLoading.html

    The only thing is, I'd really much rather stick to my old and very simple
    strategy of "app=document.getElementById(appletId); app.someMethod();" and
    block synchronously until the applet is loaded. The problem is that although
    that strategy works like a charm with FireFox, Opera, and Safari, it falls
    over on slow machines on the JVM initialization when using Chrome or IE :-(

    So I'm thinking new Applet event handling in Java 7 would lead one to
    believe this is the way to go but, alternatively, if someone can show me a
    simple way to reintroduce the blocking behaviour with IE and Chrome I'd much
    appreciate it! Some want/require a "lazy load" but I do not!

    Cheers Richard Maher

    PS. Below is the existing code that I guess I'm going to have to introduce
    the JAVA_STATUS_EVENTS parameter to: -

    /**
    * Copyright (c) Richard Maher. All rights reserved.
    *
    */

    function Tier3Client(application,
    codeBase,
    port,
    maxBuf,
    hostCharSet,
    sslReqd)
    {
    this.facPrefix = "T3$";
    this.application = application;
    this.codeBase = codeBase;
    this.port = port;
    this.maxBuf = maxBuf;
    this.hostCharSet = hostCharSet;
    this.sslReqd = sslReqd;
    this.msgPend = new Array();

    var appletId = "Tier3__" + application + "_Applet";

    try {
    var idTaken = document.getElementById(appletId);
    }
    catch (err) {};

    if (idTaken != null) {
    throw new Error("Tier3 Client already registered for " +
    this.application);
    return;
    }

    var archiveName = "tier3Client.jar";
    var className = "tier3Client/Tier3Application";

    var appletParams = [{"name":"archive", "value":archiveName},
    {"name":"codebase", "value":codeBase },
    {"name":"code", "value":className },
    {"name":"mayscript", "value":"true" },
    {"name":"scriptable", "value":"true" },
    {"name":"APPLICATION", "value":application},
    {"name":"PORT", "value":port },
    {"name":"MAXBUF", "value":maxBuf },
    {"name":"HOSTCHARSET", "value":hostCharSet},
    {"name":"SSLREQD", "value":sslReqd }];
    var startParam = 0;

    var objectTag = "<object classid=";

    if (/Internet Explorer/.test(navigator.appName)) {
    objectTag = objectTag +
    '"clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" ';
    } else {
    objectTag = objectTag +
    '"java:' + className + '.class" type="application/x-java-applet
    " ' +
    'archive="' + codeBase + archiveName + '"';
    startParam = 1;
    }

    objectTag = objectTag + ' width= "0" height= "0" id="' + appletId +
    '">';

    for (i=startParam; i<appletParams.length; i++){
    objectTag = objectTag + '<param name ="' + appletParams.name +
    '" ' +
    'value ="' + appletParams.value +
    '">';
    }

    objectTag = objectTag + "</object>";

    var appletDiv = document.createElement("div");
    appletDiv.innerHTML = objectTag;

    try {
    document.body.appendChild(appletDiv);
    this.chan = document.getElementById(appletId);
    }
    catch(err) {
    alert("Tier3 unable to load applet for " + this.application +
    ": -\n" + err.description);
    this.chan = null;
    };

    if (this.chan == null) {
    throw new Error("Tier3 was unable to initialize the applet for " +
    this.application);
    return;
    } else {
    if (!this.chan.isAuthorized()) {
    throw new Error("Tier3 User authentication unsuccessful for " +
    this.application);
    return;
    }
    }

    Tier3Client.applications[this.application] = this;

    return this;
    }

    Tier3Client.MAJVERS = 1;
    Tier3Client.MINVERS = 0;

    Tier3Client.launder =
    function(jsobject) {
    return jsobject;
    };

    Tier3Client.prototype = {

    send:
    function(msgBody, callback)
    {
    if (arguments.length < 2) {
    throw new Error("Insufficient arguments for send(msgBody,
    callback)");
    }

    var chan = this.chan;
    var callbackArgs = new Array();
    var responseCnt = 0;
    var i = 0;

    var msgCandidate =
    {
    msgSlotId : -1,
    msgSeqNum : -1,
    chan : chan,
    callback : callback,
    callbackArgs : callbackArgs,

    dispatcher :
    function(responseMsg,
    msgSlotId,
    msgSeqNum)
    {
    this.responseCnt++;
    this.msgSlotId = msgSlotId;
    this.msgSeqNum = msgSeqNum;
    callbackArgs[0] = responseMsg;

    try {
    callback.apply(this, callbackArgs);
    }
    catch (err) {
    throw new Error("Error calling callback
    routine: -\n" + err.description);
    }
    },

    getMsgSeqNum :
    function() {
    return this.msgSeqNum;
    },

    getResponseCnt:
    function() {
    return this.responseCnt;
    },

    complete :
    function() {
    return chan.complete(this.msgId);
    }

    };

    if (typeof callback != "function") {
    throw new Error("The 'callback' parameter is not a
    function");
    }

    for (i=2; i<arguments.length; i++) {
    callbackArgs[i - 1] = arguments;
    }

    return chan.send(msgCandidate, msgBody);
    }

    };

    Tier3Client.applications = {};
     
    Richard Maher, Apr 26, 2012
    #1
    1. Advertising

  2. "Richard Maher" <> wrote in message
    news:jnbfsm$10q$...
    > Hi,
    >
    > I found the following pages and find them very interesting and useful: -
    > http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/applet/appletStatus.html
    > http://docs.oracle.com/javase/tutorial/deployment/applet/appletStatus.html
    > a good example of use: -
    > http://docs.oracle.com/javase/tutor...dCallback/AppletPageUpdatedDuringLoading.html
    >


    Ok, the onLoad, onError, and Status attributes all seem to do what it says
    on the tin for Applets with Java7 and FireFox, Opera, and even IE.
    Unfortunately on Chrome, document.getElementById("myApplet") still returns
    before the Applet Object has formed enough so Status is "undefined".

    Is there anyway to tell Chrome to wait? Does it have it's own onLoad, or
    onReadyStateChange handlers for Applets?

    Cheers Richard Maher
     
    Richard Maher, Apr 28, 2012
    #2
    1. Advertising

  3. "Richard Maher" <> wrote in message
    news:jnfrl8$o1d$...

    > Ok, the onLoad, onError, and Status attributes all seem to do what it says
    > on the tin for Applets with Java7 and FireFox, Opera, and even IE.
    > Unfortunately on Chrome, document.getElementById("myApplet") still returns
    > before the Applet Object has formed enough so Status is "undefined".
    >
    > Is there anyway to tell Chrome to wait? Does it have it's own onLoad, or
    > onReadyStateChange handlers for Applets?


    In case anyone's interested in the outcome, for the sake of Chrome I had to
    put a setTimeout poll (hate it!) on the
    document.getElementById("appletId").status - for example: -

    var waitForAppletDOM = function() {
    if (window.console) console.log("in waitForAppletDOM");
    var appletStatus = ((chanG.status||undefined) == undefined) ? 0
    : chanG.status;
    switch (appletStatus) {
    case 0:
    if (window.console) console.log("case 0");
    setTimeout(waitForAppletDOM,250);
    break;
    case 1:
    if (window.console) console.log("case 1");
    chanG.onLoad = appletLoad;
    chanG.onError = appletError;
    break;
    case 2:
    if (window.console) console.log("case 2");
    alert("Applet is already loaded");
    break;
    case 3:
    if (window.console) console.log("case 3");
    throw new Error("Error activating Applet");
    break;
    default:
    throw new Error("Invalid Applet status");
    }

    Needles to say, Windows/Safari is a dead bloody loss :-( Also note that, for
    FireFox and Opera, if you do an "alert('some-debug-stuff')" from you
    "onError" handler the our browser freezes.

    >
    > Cheers Richard Maher
    >
     
    Richard Maher, Apr 29, 2012
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Boban Dragojlovic

    Dynamic Buttons and Event Handlers, revisited

    Boban Dragojlovic, Jun 24, 2003, in forum: ASP .Net
    Replies:
    0
    Views:
    1,879
    Boban Dragojlovic
    Jun 24, 2003
  2. Julian Hayward

    Applet event handlers changed with Java 1.4.x?

    Julian Hayward, Apr 19, 2004, in forum: Javascript
    Replies:
    2
    Views:
    137
    Martin Honnen
    Apr 19, 2004
  3. Shyam
    Replies:
    0
    Views:
    364
    Shyam
    Aug 30, 2012
  4. Replies:
    6
    Views:
    232
    Arved Sandstrom
    Dec 26, 2013
  5. Dennis Haupt

    java8 up to 6x slower than java7

    Dennis Haupt, Feb 15, 2014, in forum: Java
    Replies:
    19
    Views:
    286
Loading...

Share This Page