session2-j2me development-environment
DESCRIPTION
J2ME development-environmentTRANSCRIPT
![Page 1: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/1.jpg)
1Introduction to J2ME
Outline MIDP Building J2ME Apps- Tool J2ME Wireless Toolkit Demo MIDlet Programming
-- MIDlet Transition States
-- Midlet Skeleton
-- Two Level API
-- Displaying Objects
-- First Example – HelloWorld
-- Event Handling with Commands
-- Command Example
![Page 2: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/2.jpg)
2Introduction to J2ME
Mobile Information Device Profile (MIDP) Is a set of APIs that allow developers to control
mobile device-specific problems
– i.e. user interfaces, local storage and client application lifecycles etc.
MIDlets minimum requirements
– 96 x 54 pixels mono screen
– two-way wireless network
– input device (i.e. keypad)
– 128 KB ROM for CLDC/MIDP class and another 32 KB RAM for the KVM
Midlets are the most important and popular applications in the J2ME family.
![Page 3: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/3.jpg)
3Introduction to J2ME
MIDP
![Page 4: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/4.jpg)
4Introduction to J2ME
Building J2ME Apps- Tool Sun Java Wireless Toolkit 2.x for CLDC (The
newest version is 2.5.2 in Jan 2008) which can be downloaded from
http://java.sun.com/j2me/download.html
![Page 5: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/5.jpg)
5Introduction to J2ME
J2ME Wireless Toolkit Demo Launch the Wireless Toolkit:
– Start > Programs > Sun Java(TM) Wireless Toolkit 2.5.2 for CLDC
WTK already includes a set of demo programs ready to run.
![Page 6: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/6.jpg)
6Introduction to J2ME
J2ME Wireless Toolkit Demo Select menu item
File > Open Project ... Select UIDemo and
click Open Project.
The projects can be used as the templates of your applications.
![Page 7: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/7.jpg)
7Introduction to J2ME
J2ME Wireless Toolkit Demo Click the Build and then the Run buttons.
![Page 8: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/8.jpg)
8Introduction to J2ME
J2ME Wireless Toolkit Demo The main menu screen is shown up. You can choose
a program and select Launch to start the program.
![Page 9: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/9.jpg)
9Introduction to J2ME
MIDlet Programming Any MIDP application must extends MIDlet This is the MIDP equivalent of an applet, where
starting/stopping is under the control of the environment
Like Java applets, MIDlets have an application life cycle while running on a mobile device.
![Page 10: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/10.jpg)
10Introduction to J2ME
MIDlet Transition States Specifically, a MIDlet can be in one of three states as
shown:
Why do we need a Paused state?
![Page 11: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/11.jpg)
11Introduction to J2ME
Midlet Skeletonimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;
public class MyApp extends MIDlet { public void startApp() { // start up code } public void pauseApp() { // we aren't showing any more }
public void destroyApp(boolean unconditional) { // clean up }}
Note that startApp(), pauseApp() and destroyApp() are abstract methods.
Midlet program must override these 3 methods even if not used.
![Page 12: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/12.jpg)
12Introduction to J2ME
Two Level API There are two areas of the API which you should be
concerned with - the high and low-level API.
High-Level Provides input elements such as,
– text fields, choices, and form
Low-level is for drawing on Canvases and capturing keyed events
All MIDlet applications need to import the necessary midlet and lcdui packages:
– import javax.microedition.midlet.*;
– import javax.microedition.lcdui.*;
![Page 13: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/13.jpg)
13Introduction to J2ME
Displaying Objects High-level Screens have a base class called
Displayable. To show something on a MIDP device, you need to
obtain the device’s display
– javax.microedition.lcdui.Display This Display class is the one and only display
manager for each active MIDlet and provides information about the device’s display capability.
Subclassed Displayable classes will fill the whole screen
![Page 14: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/14.jpg)
14Introduction to J2ME
Displaying Objects To show a Displayable object you must use the
setCurrent() method on the Display object.
Form mainForm = new Form ("First Program ");
Display display = Display.getDisplay(this);
display.setCurrent (mainForm);
Note that Form is a Displayable subclass.
![Page 15: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/15.jpg)
15Introduction to J2ME
First Example - HelloWorldimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet {
public HelloWorld() { }
public void startApp() {
Form form = new Form( "First Program" ); form.append( "Hello World" ); Display.getDisplay(this).setCurrent( form ); }
public void pauseApp() {}
public void destroyApp( boolean unconditional ) {}}
![Page 16: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/16.jpg)
16Introduction to J2ME
Building the MIDlet Run the program KToolbar
Start>Programs>J2ME Wireless Toolkit 2.x>KToolbar
Click on New Project and enter the Project name and class name as shown below
![Page 17: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/17.jpg)
17Introduction to J2ME
Building the MIDlet After pressing the Create Project Button, a directory
tree will be created for the project:
![Page 18: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/18.jpg)
18Introduction to J2ME
Building the MIDlet Use TextPad to create a source file HelloWorld.java
and save it under the directory src.
![Page 19: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/19.jpg)
19Introduction to J2ME
Building and Run the MIDlet Click the Build and then the Run buttons.
![Page 20: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/20.jpg)
20Introduction to J2ME
How can the program exit? The program can not exit unless you close the
emulator. To provide a way to exit the program, you need to
use Commands. A command is like a button, it has a title, like "OK" or
"Cancel," and your application can respond appropriately when the user invokes the command.
![Page 21: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/21.jpg)
21Introduction to J2ME
Event Handling with Commands Displayable, the parent of all screen displays,
supports Commands.
The device determines how the commands are shown on the screen or invoked by user.
Every Displayable keeps a list of its Commands. You can add and remove Commands using the following methods:
– public void addCommand(Command cmd)
– public void removeCommand(Command cmd)
![Page 22: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/22.jpg)
22Introduction to J2ME
Command Objects In J2ME, commands are commonly represented with
soft-buttons on the device. The following diagram shows two Command objects, one with the label "Exit" and one with label "View."
soft-buttons
![Page 23: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/23.jpg)
23Introduction to J2ME
Command Objects If there are too many commands to be shown on the
display, a device will create a menu to hold multiple commands. The following diagram shows how this might look.
![Page 24: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/24.jpg)
24Introduction to J2ME
Use Command objects The basic steps to process events with a Command
object are as follows:
1. Create a Command object.
2. Add the Command to a Form (or other GUI objects TextBox, List, or Canvas).
3. Create and set a listener for the Form. Upon detection of an event, the listener will call the
method commandAction().
![Page 25: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/25.jpg)
25Introduction to J2ME
Create a Command To create a Command, you need to supply a label, a
type, and a priority. The type is used to signify a commonly used
command. It helps device to arrange the commands.Command Meaning
BACK returns to the previous screen.
CANCEL standard negative answer to a dialog
EXIT for exiting from the application.
HELP a request for on-line help.
ITEM specific to the items of the Screen or the elements of a Choice.
OK standard positive answer to a dialog
SCREEN an application-defined command
STOP A command that will stop some currently running process, operation, etc.
![Page 26: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/26.jpg)
26Introduction to J2ME
Create a Command To create a standard OK command, for example, you
would do this:
Command c = new Command("OK", Command.OK, 0);
To create a command specific to your application, you might do this:
Command c = new Command(
"Launch", Command.SCREEN, 0);
labeltype priority
![Page 27: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/27.jpg)
27Introduction to J2ME
Priority and Long Label Every command has a priority. Lower numbers indicate a higher priority. If you add a command with priority 0, then several more
with priority 1, the priority 0 command will show up on the screen directly. The other commands will most likely end up in a secondary menu.
MIDP also supports for long labels on commands. You can create a command with a short and long label
like this:
Command c = new Command("Run", "Run simulation", Command.SCREEN, 0);
The device decides which label it will use based on the available screen space and the size of the labels.
![Page 28: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/28.jpg)
28Introduction to J2ME
Responding to Commands Commands show up on the screen, but nothing
happens automatically when a user invokes a command.
You need to write an object called a listener which will be called when the user invokes any command in a Displayable.
The listener is an object that implements the CommandListener interface.
To register the listener with a Displayable, use the following method:
– public void setListener(CommandListener l) Note it is one Listener per Displayable, NOT one
Listener per one Command.
![Page 29: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/29.jpg)
29Introduction to J2ME
Exampleimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;
public class Commander extends MIDlet implements CommandListener { public void startApp() { Displayable d = new Form( "Test Command" ); Command c = new Command("Exit", Command.EXIT, 0); d.addCommand(c); d.setCommandListener(this); Display.getDisplay(this).setCurrent(d); }
public void pauseApp() { } public void destroyApp(boolean unconditional) { }
public void commandAction(Command c, Displayable s) { notifyDestroyed(); }} Abstract method of CommandListener. Will
be called when any command in the Form is selected.
![Page 30: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/30.jpg)
30Introduction to J2ME
![Page 31: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/31.jpg)
31Introduction to J2ME
Another Command Example (Two Forms)
Launch
Exit
Exit
2nd Form
Go to First Form
![Page 32: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/32.jpg)
32Introduction to J2ME
Another Command Example (Two Forms)
import javax.microedition.lcdui.*;import javax.microedition.midlet.*;
public class Commander2 extends MIDlet implements CommandListener { Display display = null; Form f1 = null; Form f2 = null;
Command firstFormCommand = new Command("1st Form", "Go to First Form", Command.SCREEN, 0);
Command secondFormCommand = new Command("2nd Form", "Go to Second Form", Command.SCREEN, 0);
Command exitCommand = new Command("Exit", Command.EXIT, 1);
![Page 33: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/33.jpg)
33Introduction to J2ME
Another Command Example (Two Forms) public void startApp() { display = Display.getDisplay(this);
f1 = new Form( "Form 1" ); f1.append( "This is Form No. 1" ); f1.addCommand(secondFormCommand); f1.addCommand(exitCommand); f1.setCommandListener(this);
f2 = new Form( "Form 2" ); f2.append( "This is Form No. 2" ); f2.addCommand(firstFormCommand); f2.addCommand(exitCommand); f2.setCommandListener(this);
display.setCurrent( f1 ); }
![Page 34: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/34.jpg)
34Introduction to J2ME
Another Command Example (Two Forms) public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
public void commandAction(Command c, Displayable d) { if (c==exitCommand)
notifyDestroyed(); else if (c==firstFormCommand)
Display.getDisplay(this).setCurrent( f1 ); else
Display.getDisplay(this).setCurrent( f2 ); }}
![Page 35: Session2-J2ME development-environment](https://reader036.vdocuments.us/reader036/viewer/2022062405/5560cf30d8b42a3c158b4db2/html5/thumbnails/35.jpg)
35Introduction to J2ME
Simple Debugging System.out.print and System.out.println can be used
for debugging.
When run in the simulator, the output is put on the console, not the phone.
public void pauseApp() { } public void destroyApp(boolean unconditional) { }
public void commandAction(Command c, Displayable d) { if (c==exitCommand)
notifyDestroyed(); else if (c==firstFormCommand) {
Display.getDisplay(this).setCurrent( f1 ); System.out.println(“1st Form is called");
} else { System.out.println("2nd Form is called");
Display.getDisplay(this).setCurrent( f2 ); }
}}