COMP201 Java Programming
Download
Report
Transcript COMP201 Java Programming
COMP201 Java Programming
Part II: GUI Programming
Topic 11: Applets
Chapter 10
COMP201 Topic 11 / Slide 2
Introduction
Applets are java programs that run within browsers
Client Browser
Applet
Server
Applet
User
Example:
Jmol applet
– http://jmol.sourceforge.net/applet/
NASA 3D real-time satellite tracker
– http://liftoff.msfc.nasa.gov/realtime/jtrack/3d/JTrack3d.html
COMP201 Topic 11 / Slide 3
Outline
An example
Creation
Transportation
Converting applications to applets
Jar files: Move applets from servers to browsers quickly
Operation
Applet life cycle
Security restrictions
Getting resources from home
Communicating with browser
Client Browser
Applet
User
Applet
Server
COMP201 Topic 11 / Slide 4
An Example
An applet is a Java class which extends java.applet.Applet
If Swing components are used, the applet must extend from
javax.swing.JApplet
public class NotHelloWorldApplet extends JApplet
{ public void init()
{
Container contentPane = getContentPane();
JLabel label = new JLabel("Not a Hello,
World applet", SwingConstants.CENTER);
contentPane.add(label);
}
} //NotHelloWorldApplet.java
COMP201 Topic 11 / Slide 5
An Example
Compile and run
Compile: javac NotHelloWorldApplet.java
Run:
–
Create a HTML file that tells the browser which file to load and how to size the
applet
<html><body> This is an example.
<applet code=“NotHelloWorldApplet.class” width=300
height=300>
This text shown if browser doesn’t do Java.</applet>
</body></html>
–
View the HTML file with a browser or the command appletviewer
Note:
–
Textpad: Cntrl+3 – creates a simple html file and show it with appletviewer
COMP201 Topic 11 / Slide 6
An Example
More notes
To view applet, one needs Java 2 enabled browser (recent version
of IE and Netscape, e.g. IE 6, Netscape 6, Netscape 7. Netscape 4
is not Java 2 enabled)
Class files are cached by browser.
– Restart browser after each modification
– Alternatively, one can clear the cache from Java console, which can
be accessed from Netscape or control panel on Windows
COMP201 Topic 11 / Slide 7
An Example
COMP201 Topic 11 / Slide 8
An Example
Compare with application: NotHelloWorld.java
class NotHelloWorldFrame extends JFrame
{
public NotHelloWorldFrame()
{
setTitle("NotHelloWorld");
setSize(300, 200);
Container contentPane = getContentPane();
JLabel label = new JLabel("Not a Hello,
World application", SwingConstants.CENTER);
contentPane.add(label);
}
}
public class NotHelloWorldApplication
{ public static void main(String[] args)
{
NotHelloWorldFrame frame =
new NotHelloWorldFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}}
COMP201 Topic 11 / Slide 9
An Example
Applets are created, run, and destroyed by web browser
Don’t set size for an applet: determined by HTML file.
Don’t set title for an applet: applets cannot have title bars.
– Can have menus.
No need to explicitly construct an applet. Construction code placed inside
the init method.
There is no main method.
An applet cannot be closed. It terminates automatically when the browser
exit.
No need to call method show. An applet is displayed automatically.
COMP201 Topic 11 / Slide 10
Outline
An example
Creation
Transportation
Converting applications to applets
Jar files: Move applets from servers to browsers quickly
Operation
Applet life cycle
Security restrictions
Getting resources from home
Communicating with browser
COMP201 Topic 11 / Slide 11
Creating Applets from Applications
Non-IO applications for now
Pop up window for application
Embed top-level frame of application inside browser
COMP201 Topic 11 / Slide 12
Creating Applets from Applications
Popping up a window for application.
Assume: Separate class for creating and showing a top-level frame. (If
this class also does some other things, move the other things to other
classes.)
class NotHelloWorldFrame extends JFrame {…}
public class NotHelloWorldApplication
{ public static void main(String[] args)
{ JFrame frame = new NotHelloWorldFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
COMP201 Topic 11 / Slide 13
Creating Applets from Applications
Steps of conversion:
Delete the class for creating and showing the top-level frame
Add an applet class whose init method contains the same instructions
as main method of deleted class.
Remove code for closing window
public class NHWApplet extends JApplet
{ public void init()
{
JFrame frame = new NotHelloWorldFrame();
frame.show();
}
} //NHWApplet.java
The popup window coming with a warning message for security reasons,
(which can be avoided for signed applets).
COMP201 Topic 11 / Slide 14
Creating Applets from Applications
Placing top-level frame of application inside browser.
Separate class for creating and showing a top-level frame. (If this class
also does some other things, move the other things to other classes.)
class NotHelloWorldFrame extends JFrame
{
public NotHelloWorldFrame()
{
setTitle("NotHelloWorld");
setSize(300, 200);
Container contentPane = getContentPane();
JLabel label = new JLabel("Not a Hello, World applet", SwingConstants.CENTER);
contentPane.add(label);
}}
public class NotHelloWorld
{ public static void main(String[ ] args)
{ NotHelloWorldFrame frame = new NotHelloWorldFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}}
COMP201 Topic 11 / Slide 15
Creating Applets from Applications
Steps of conversion
Delete the class for creating and showing the top-level frame
Convert the top-level frame class into an applet
–
–
–
–
JFrame class => JApplet class; must be public
Remove setSize: set in HTML file
Remove setTitle: Applet cannot have title bar
Replace constructor with init.
COMP201 Topic 11 / Slide 16
Creating Applets from Applications
Let’s do it now
class NotHelloWorldFrame extends JFrame
{
public NotHelloWorldFrame()
{
setTitle("NotHelloWorld");
setSize(300, 200);
Container contentPane = getContentPane();
JLabel label = new JLabel("Not a Hello, World applet", SwingConstants.CENTER);
contentPane.add(label);
}}
public class NotHelloWorld
{ public static void main(String[ ] args)
{ NotHelloWorldFrame frame = new NotHelloWorldFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}}
COMP201 Topic 11 / Slide 17
Outline
An example
Creation
Transportation
Converting applications to applets
Jar files: Move applets from servers to browsers quickly
Operation
Applet life cycle
Security restrictions
Getting resources from home
Communicating with browser
COMP201 Topic 11 / Slide 18
Transportation of Applets via Jar Files
PopupCalculatorApplet involve three classes
HTML file contains name of the applet class
CalculatorFrame.class, CalculatorPanel.class
PopupCalculatorApplet.class
<APPLET CODE=" PopupCalculatorApplet.class " WIDTH = 60
HEIGHT = 20 > </APPLET>
Class loader
First fetches PopupCalculatorApplet.class
In the process, it notices that some other classes are also needed. It then makes
net connections to get them.
Many connections might be needed in general, especially when there are
associated resources such as images and sounds.
COMP201 Topic 11 / Slide 19
Jar Files
Jar files
A jar file is simply a zip file that contains a manifest file, which
describes features of the archive
Java Archive (JAR) files allow one to bundle a set of classes and
resources into one file that can be downloaded via one net connection.
COMP201 Topic 11 / Slide 20
Jar Files
Creating jar files
jar cf PopupCalculatorAppletClasses.jar *class
In general:
jar cf myJarFile.jar
*.class *.gif
pack all files ending with .class or .gif
COMP201 Topic 11 / Slide 21
Jar Files
Refer to JAR files in the APPLET tag
<APPLET CODE="PopupCalculatorApplet.class"
ARCHIVE="PopupCalculatorAppletClasses.jar,swing.jar"
WIDTH = 65 HEIGHT = 20 > </APPLET>
JAR file is downloaded via one net connection.
Class loader tries to find necessary files in JAR file before attempting
to get them from the net.
COMP201 Topic 11 / Slide 22
Diversion/Self-Running Jar File
“To make an executable jar file, we need to indicate the main class
in the manifest file.
Create “mainclass.mf” with one line (no “class” and ended by “return”)
Main-Class: MyApplet
Create jar file with the manifest file
jar cvfm MyJarFile.jar mainclass.mf *class
Also, one can update the manifest files of an existing jar file
jar umf mainclass.mf MyJarFile.jar
Run:
java -jar MyJarFile.jar
Or click on file icon
Self-Running Calculator
COMP201 Topic 11 / Slide 23
Outline
An example
Creation
Transportation
Converting applications to applets
Jar files: Move applets from servers to browsers quickly
Operation
Applet life cycle
Security restrictions
Getting resources from home
Communicating with browser
COMP201 Topic 11 / Slide 24
Applet Life Cycle
An application starts from main and
runs until exit
Applets are controlled by browser
through 4 methods
init( )
init()
non-existent
– Called when loaded by browser
start()
– Called right after init and when user
return to page
stop()
– Called when user moves off page
on page
destroy( )
destroy( )
start( )
destroy()
– Called when browser shuts down.
Overwrite the methods to control applet
behavior
off page
stop( )
COMP201 Topic 11 / Slide 25
Applet Life Cycle
public void init()
One-time initialization when first loaded
Good place to process parameters and add interface components.
public void start()
Called whenever user returns to the page containing the applet
after having gone off to other pages.
Can be called multiple times.
Good place to resume animation or game
COMP201 Topic 11 / Slide 26
Applet Life Cycle
public void stop()
Called when user moves off page (to other pages)
Good place to stop time-consuming activities such as animation and audio
playing.
public void destroy()
Called when browser shuts down.
Good place to reclaim non-memory-dependent resources such as
graphics contexts.
Normally, no need to worry.
Example: sound (Stop Playing when going out of page)
Compare with the one of the two other versions.
COMP201 Topic 11 / Slide 27
Outline
An example
Creation
Transportation
Converting applications to applets
Jar files: Move applets from servers to browsers quickly
Operation
Applet life cycle
Security restrictions
Getting resources from home
Communicating with browser
COMP201 Topic 11 / Slide 28
Security Restrictions
Applets are downloaded from the net and executed by a
browser’s JVM immediately.
User never gets a chance to confirm or to stop an applet from
running.
Consequently, applets are restricted in what they can do.
The applet security manager is responsible for enforcing access
rules and throws an SecurityException when an access
rule is violated.
COMP201 Topic 11 / Slide 29
Security Restriction
By default, an applet is restricted to run “inside the
sandbox”. Strictest security restrictions.
Signed applets can have more access privileges.
For now, we consider only applets playing in the
sandbox.
Access rights for Applets and Java Applications (JA)
BR: applets running inside a browser with default applet
security model
AV: applets running insider Applet viewer
BR
AV
JA
Read local file
N
Y
Y
Write local file
N
Y
Y
Get file info.
N
Y
Y
Delete file
N
N
Y
Run another program
N
Y
Y
Read the user.name property
N
Y
Y
Y
Y
Y
N
Y
Y
Load Java library
N
Y
Y
Call exit
N
Y
Y
warning
Y
Y
Connect to network port on home server
Connect to network port on other server
Create a pop-up window
COMP201 Topic 11 / Slide 31
Outline
An example
Creation
Transportation
Converting applications to applets
Jar files: Move applets from servers to browsers quickly
Operation
Client Browser
Applet life cycle
Security restrictions
Getting resources from home
Communicating with browser
Applet
User
Applet
Server
COMP201 Topic 11 / Slide 32
Resources for Applets
One can provide information to applets in HTML file
Applets can access resources at home server:
Text
Multimedia
COMP201 Topic 11 / Slide 33
Passing Info to Applets via HTML File
In HTML file, use PARAM, NAME, VALUE tags
<APPLET CODE="Chart.class" WIDTH=400 HEIGHT=300>
<PARAM NAME="title" VALUE="Diameters of the Planets">
<PARAM NAME="values" VALUE="9">
…. </Applet>
In applet, use the getParameter method of the Applet class
getParameter("title"); // returns "Diameters of the Planets“
String vString = getParameter(“values”); // returns “9”
if (vString == null )
{do something}
// precaution
else
int v=Integer.parseInt(vString);//must parse to get numbers
Chart.java, Chart.html
COMP201 Topic 11 / Slide 34
Accessing Resources at Home Server
Where is home?
Inside a subclass of Applet
Inside any other class x
getDocumentBase returns URL of the html file that calls the
applet
getCodeBase returns URL of the applet itself
x.class gives one an object of the Class class that contain
information of x.
(Class is a special class and has method getResource.
C.f. Object class)
x.class.getResource( resourceName ) returns URL
of resource
Need the URL class in java.net package
import java.net.*
COMP201 Topic 11 / Slide 35
Accessing Text Files at Home Server
Find the URL of text file and the create an InputStream using
the openStream method of URL class
InputStream in = url.openStream();
Or create an InputStream directly using the
getResourceAsStream method of the Class class.
InputStream in = x.class.getResoruceAsStream(
fileName);
The InputStream can be nested with other streams in the
normal way (see Topic 4)
ResourceTest.java, ResourceTest.html
COMP201 Topic 11 / Slide 36
Accessing Images at Home Server
Applets can handle images in GIF or JPEG format
Load images
Inside an subclass Applet, use
getImage(url), getImage(url, name)
Inside other classes java.awt.Toolkit
Toolkit.getDefaultToolkit().getImage( url );
How to show an image?
ImageLoadApplet.java
Exercise: Load the images in applet class
COMP201 Topic 11 / Slide 37
Accessing Audio Files at Home Server
Applets can handle audio files in AU, AIFF, WAV, or
MIDI format.
Audio Clips (java.applet.Applet)
Load:
AudioClip getAudioClip(url),
AudioClip getAudioClip(url, name)
Then use play method of AudioClip to play
and the stop method to stop
Play without first loading:
void play(url),
void play(url, name)
//SoundApplet.java
COMP201 Topic 11 / Slide 38
Outline
An example
Creation
Transportation
Converting applications to applets
Jar files: Move applets from servers to browsers quickly
Operation
Client Browser
Applet life cycle
Security restrictions
Getting resources from home
Communicating with browser
Applet
User
Applet
Server
COMP201 Topic 11 / Slide 39
Communication with Browser
To establish a communication channel between an applet and
browser, use the getAppletContext method of the Applet
class
The method returns an object of the AppletContext, which is
an interface.
Two useful methods of interface AppletContext
showDocument( URL url )
showDocument(URL url, String target )
ShowPageApplet.java
COMP201 Topic 11 / Slide 40
Java Web Start
A technology for simplifying deployment of Java applications
Gives you the power to launch full-featured applications with a
single click from your Web browser.
The Java Web Start software is the reference implementation for
the Java Network Launching Protocol (JNLP)
http://java.sun.com/products/javawebstart/docs/developersguide.html
COMP201 Topic 11 / Slide 41
Java Web Start
What do you need?
Jar files that contain class files & resources.
A jnlp file for the application
A link from the Web page to the JNLP file
Configure the Web server so that the .jnlp file extension invokes Web Start
.(http://java.sun.com/products/javawebstart/docs/developersguide.html#w
ebsite)
Client side:
Install Java Web Start, included in Download J2SE 5.0 JRE/SDK
(jdk1.5.1)
COMP201 Topic 11 / Slide 42
Java Web Start
Example 1 (javaWebStartExamples.zip):
NotHelloWorld.jar generated from NotHelloWorld.java
NotHelloWorld.jnlp
See next page
index.html
<a href="http://www.cs.ust.hk/~lzhang/teach/java03/webStart/NotHelloWorld.jnlp">
NotHelloWorld Application</a>
COMP201 Topic 11 / Slide 43
Java Web Start
NotHelloWorld.jnlp
<?xml version="1.0" encoding="utf-8"?>
<jnlp
codebase="http://www.cs.ust.hk/~lzhang/teach/java03/webStart"
href="NotHelloWorld.jnlp">
<information>
<title>NotHelloWorld Application</title>
<vendor>Sun Microsystems, Inc.</vendor>
<homepage href="docs/help.html"/>
<description>NotHelloWorld Application</description>
<description kind="short">A demo of nothing useful</description>
<offline-allowed/>
</information>
<resources>
<j2se version="1.3"/>
<jar href="NotHelloWorld.jar"/>
</resources>
<application-desc main-class="NotHelloWorld"/>
</jnlp>
COMP201 Topic 11 / Slide 44
Java Web Start
Unlike applets, web-start applications have a main() like normal Java
applications. There are a few special requirements:
The application must be contained in a jar file
By default restricted to Sandbox as Applets (cannot call standard IO libaries to
access the disk, you can only connect back the source host etc).
Resources (files, images) must also be in a jar file and must be accessed
using the getResource() method.
Like applets users can grant more access if they trust your code
A JNLP API is required for some applications.
COMP201 Topic 11 / Slide 45
Java Web Start
Web-start applications differ from applets in several ways:
They are stored in the local disk so do not need to be downloaded each
time.
They can call System.exit().
They do not have the same lifecycle.
A web-start application can use a special class library which allows the
application to prompt users to approve reading and writing to/from the
local disk.
Rather than HMTL tags in a web-page, XML (JNLP) is used to describe
web-start applications.
COMP201 Topic 11 / Slide 46
Java Web Start
Example 2: ImageTest
ImageTest.java
– Loading image using the getResource method
ImageTest.jar
– Includes class files & image files
ImageTest.jnlp
Index.html
<a href="http://www.cs.ust.hk/~lzhang/teach/java03/webStart/ImageTest.jnlp">
ImageTest Application</a>