Creating Dynamic Thin-Client User-Interfaces with Flash and Java

thickbugSoftware and s/w Development

Oct 28, 2013 (3 years and 7 months ago)

54 views

Creating Dynamic Thin
-
Client
User
-
Interfaces with Flash and
Java

Brad Neuberg,
bneuberg@randomwalk.com

The Problem & Motivation

The Problem:

Find a new rendering engine for Java.

Motivation:
Java is a fabulous networking language
and “model” language, but is a lousy “display”
language.

Problems with Java’s Current
Rendering Engine (JRE 1.2.2)


Large (many megabytes)


Slow


Not truly cross
-
platform (disparate support
across platforms)


No installed base (Sun has been terrible
with bundling deals

Requirements for a New
Rendering Engine

1)
Must be cross
-
platform

2)
Must be very fast

3)
Must be small

4)
Can be integrated well with Java

5)
Supports the “new way” of creating UIs

6)
Creates good looking,
dynamic

UIs

7)
Easy to work with



The “New Way” to Create
User
-
Interfaces


First appeared with HTML, similar to
Model
-
View
-
Controller


User
-
interface is completely “unhooked”
from behavior of program


Designer draws and creates user
-
interface
using some tools (Dreamweaver, Director,
etc.)


Program “hooks onto” UI to control it

The “New Way” to Create
User
-
Interfaces (Continued)


Example: JSP file has UI which “calls”
JavaBeans for behavior.



Advantages of this New Model


Can offer great productivity


Creates much better
-
looking UIs


Offers greater flexibility to evolve UIs


No throwaway prototype UI

Candidates for the New
Rendering Engine


DHTML + JavaScript


DHTML totally incompatible across browsers


Even IE for Mac and IE for Windows have
different programming models


Slow


JavaScript is terrible for large
-
scale engineering


JavaScript also has few good built
-
in libraries

Candidates for the New
Rendering Engine (Continued)


DHTML + Java through IBM’s DirectDom
(formally Weblets) Toolkit


Allows Java to control browser HTML
elements


Promising, but still at alpha
-
level


Large download (~1.5 megs)

Candidates for the New
Rendering Engine (Continued)


Servlet/JSP generated HTML


No downloads


Slow trips back to server


Limited user
-
interface ability

Candidates for the New
Rendering Engine (Continued)


Mozilla


XUL (eXtensible UI Language) allows for UIs that are
controlled by Java


Very cross
-
platform (available for Linux, Windows,
Mac, Solaris, HP
-
UX, BeOS, etc.)


Still unstable and alpha
-
level


Large Download (~2
-

~15 megs, depending on number
of components)


Sluggish


Promising, but not mature yet

Candidates for the New
Rendering Engine (Continued)


SVG (Scalable Vector Graphics) through Adobe’s
Plugin controlled by DirectDom


Wonderful, easy programming model


SVG is a standard


Standard is still immature, though


Viewers are slow


Large download


SVG plugin (~3 megs) + DirectDom
(~1.5 megs)


Both SVG plugin & Direct Dom are alpha
-
level


No tool support to create SVG files

Candidates for the New
Rendering Engine (Continued)


JRE 1.3


Much faster than previous JREs, but still not
fast enough


Swing is now truly mature with JRE 1.3


Large download (~5 megs)


Still beta


Major memory requirements for Swing apps

Candidates for the New
Rendering Engine (Continued)


Flash 4 Plugin + Java 1.1 Native Browser VM


Flash plugin very ubiquitous (on about ~85% of
browsers)


Flash plugin is extremely small download (~150K)


Flash is extremely cross
-
platform (Flash 4 plugin
available for Windows 95/98/NT, Mac, Solaris, Linux,
and Irix)


Flash is very fast

Candidates for the New
Rendering Engine (Continued)


Flash 4 Plugin + Java 1.1 Native Browser VM
(Continued)


Flash has advanced rendering engine (anti
-
aliased text,
cross
-
platform fonts, alpha
-
channel/transparency, text
-
fields, sprites, tweening, etc.)


Flash has very small compressed files


Easy to create using Macromedia Flash Authoring
application


Flash is well
-
known to designers


What is Flash?


Binary vector based format that supports
animation, interactivity, and text
-
rendering


Created with an authoring tool named Flash


Vector format offers small, fast downloads,
screen
-
size independence, easy conversion
to print
-
format, and animation

Flash Examples


Eye4U

(shows speed)


Balthaser

(shows text
-
effects and UI
widgets)


Yugop Scrolling UI

(shows UI widgets)


FlashZone Action Demo

(shows UI
widgets)


Romeo Design

(shows multimedia)

Flash

(advanced rendering)

+

Java

(advanced networking
and programming)

=

Killer cross
-
platform
solution

Flash/Java Integration

1.
Allow Java to call methods on Flash
Plugin (Done)

2.
Allow Flash to call Java methods and
create new Java instances (80% Done)

3.
Build on (1) to give the illusion that
objects in Flash are actually Java objects
(TBD)

Allow Java to Call Methods on
Flash Plugin


The Flash Plugin exposes several methods
to JavaScript


Play()


GetVariable(varName)


GotoFrame(frameNumber)


Etc.

Allow Java to Call Methods on
Flash Plugin (Continued)


Made JavaScript and Java wrapper around
plugin, using LiveConnect


LiveConnect allows JavaScript to call Java,
and vice
-
versa


Most people assume it’s only supported in
Netscape, but it is also completely
compatible with IE

Allow Java to Call Methods on
Flash Plugin (Continued)


Example use of FlashPlugin class:

import org.twoofdiscs.flash.FlashPlugin;

import org.twoofdiscs.flash.MainController;


public class AddressBook {


public void displayAddressBook() {


// get FlashPlugin


FlashPlugin plugin = MainController.getFlashPlugin();


plugin.TCallLabel("/", "DISPLAY_ADDRESSBOOK");


}

}

Allow Flash to call Java
methods and create new Java
instances


Flash has a light
-
weight scripting language
called ActionScript


ActionScript has a command call
FSCommand(String command, String
arguments)


This command can be used to call external
JavaScript functions

Allow Flash to call Java
methods and Create New
Java Instances (Continued)



Created reflective Java and JavaScript glue
to let Flash FSCommands call Java methods
and create Java objects

Allow Flash to Call Java
Methods and Create New
Java Instances (Continued)



Creating Java Object from Flash:


FSCommand(‘org.twoofdiscs.demo.AddressBook
myAddressBook = new
org.twoofdiscs.demo.AddressBook(“Brad Neuberg”)’)



org.twoofdiscs.demo.AddressBook myAddressBook = new
org.twoofdiscs.demo.AddressBook(“Brad Neuberg”)
-

Java
object to create



Allow Flash to Call Java
Methods and Create New
Java Instances (Continued)



Calling Java Methods from Flash


FSCommand(‘myAddressBook.getContacts()’,
‘/someTarget:var1, true, /, RETURN_RESULT_READY’


Stop



FSCommand(‘myAddressBook.getContacts()’


Gives instance
name of previously created Java object and method to run


/someTarget:var1, true, /, RETURN_RESULT_READY
-

Specifies name of Flash variable to put results into, whether the results
are an array, and the movie target and label to restart at


Give the Illusion that Objects
in Flash are Actually Java
Objects



Will allow one to define a Java interface:

public interface BankSummary {


public int getUsersChoice();


public void resetColumns();

}


Then, a Flash compiler will be run:


java org.twoofdiscs.flash.callingflash.FlashCompile
BankSummary

Give the Illusion that Objects
in Flash are Actually Java
Objects (Continued)



This will generate a Flash file, that can be
imported into a Flash movie


This Flash movie will now appear to have
an object named BankSummary that can be
created, cloned, and have methods called on
just like an ordinary Java object.

Give the Illusion that Objects
in Flash are Actually Java
Objects (Continued)



The Java will have no clue that it is talking
to Flash


Similar to CORBA proxies

The Future


As Java 2D speed increases, the Flash
engine can be written in Java


An open
-
source Java Flash engine is
already available


Everything will be able to remain the same


Will make it possible to embed Swing
components into the GUI where appropriate