|[ Also see: General
Java Tutorials Wireless
Tutorials Bluetooth BREWs
Introductory information about wireless and mobile Java and J2ME
technologies, MIDP and related subjects.
Also take a look at our general Java Tutorials,
JSP, EJBs, JDBC and Java Articles listings.
J2ME: Building an expense tracker The Java 2 Micro Edition (J2ME),
coupled with the CLDC and MIDP specifications, provides a platform that
enables developers to build Java applications that run on PDAs and
BlackBerry-style e-mail pagers and that interface with corporate software
"back home" via a wireless connection. This article kicks off a
series that will introduce you to development on the MIDP platform.
J2ME: Building an expense detail form the detail form used to edit an
existing expense item or add a new one and let you get your feet wet with
the Item family of components.
J2ME: Using the Record Management System creating a record store for
the ExpensesApp MIDlet suite using the MIDPís Record Management System (RMS).
J2ME: Sorting records the RMSís record-sorting API, the
RecordEnumeration class and RecordComparator interface, both of which you
find in the javax.microedition.rms package.
J2ME: Being a good mobile citizen polish up ExpensesApp a bit by
reducing its memory requirements and correcting some data problems using
the record change notification API.
Programming for Wireless devices using J2ME/CLDC/MIDP
J2ME Overview, J2ME Building Blocks: Virtual Machine, Configurations and
Profiles, Connected Limited Device Configuration (CLDC), Mobile
Information Device Profile (MIDP), MIDP Applications (MIDlets) and MIDlet
Lifecycle, Writing a simple MIDP Application...
J2ME Applications on Palm-powered Devices Learn how to migrate your
Enterprise J2ME applications to Palm-Powered devices including the Treo
650 and Palm LifeDrive.
J2ME for the Java
Developer How does Sun's Java 2 Micro Edition (J2ME) platform for
smaller devices compare to the more familiar Java 2 Standard Edition?
Let's dig into the details a little...
Deploy Your J2ME
Application on a Sprint Phone Web server configuration and caching
problems are just two of the obstacles you'll need to overcome when you
deploy Java applications on cell phones. This article provides the
workarounds and solutions you'll need to overcome these bumps.
|Don's Wireless Journal
||Java ME programming tutorials, mostly geared towards game programming.
Java code Can Java code be enhanced by good BREW in wireless
development? Recently IBM introduced a single JVM (Java Virtual Machine),
which acts as an extension to BREW. Java developers can take advantage of
this JVM to write Java applications once and run them on all BREW-enabled
devices as long as they have sufficient memory footprints, regardless of
manufacturer. The BREW platform is standardized, so porting applications
from one device to another is simplified. BREW also makes getting Java
applications onto handsets much easier, and enables upgrading and
recalling JVMs over the air.
Micro Edition Basics (PDF) A Very Brief History of Java, Architecture
of Java, Java 2, Java Community Process, Java 2 Micro Edition, Profiles,
Connected Limited Device Configuration (CLDC), Supported J2SE Classes,
Generic Connection Framework...
Strategies for Small Devices (PDF) If in Doubt, Do Not Use Java, Move
Computation to the Server, Simplify the Application, Build Smaller
Applications, Remove the Public Members, Use Less Memory at Run Time, Use
Scalar Types, Do Not Depend on the Garbage Collector, Help the Garbage
Collector, Use Lazy Instantiation, Release Resources Early, Reuse Objects,
Avoid Exceptions, Code with Performance in Mind, Use Local Variables,
Avoid String Concatenation, Use Threads, but Avoid Synchronization,
Separate the Model...
Micro Edition (J2ME) Specifications (PDF) Introducing the Micro
Edition, A New Virtual Machine, New and Changed Classes, Configurations
and Profiles, Building Blocks, The KVM, Related Technologies,
|Java Developer Connection
With Dates and Times in MIDP Applications Parsing and displaying
dates and times is often complicated because of formatting and locale
issues. J2SE provides several classes to simplify date and time handling
-- classes such as java.util.Calendar, java.util.Date, java.util.TimeZone,
and java.text.DateFormat. By comparison, MIDP defines only subsets of the
Calendar, Date and TimeZone classes, and does not include any form of
Custom Components for the Mobile Information Device Profile A question
that novice MIDP programmers often ask is "How can I extend the MIDP
user interface classes to define my own custom components?" You might
want to extend the TextField class, for example, to support more kinds of
constraints or alternate forms of input. Or you might want to define a
completely new kind of UI component...
Passwords to Protect Your MIDlets Security is always a concern
when you are writing an application that deals with sensitive data. It's
especially so on handheld devices, which are more apt to be lost or stolen
than a desktop computer. A handheld device is likely to hold truly
personal information that you don't want strangers to know, things such as
important phone numbers and addresses. Safeguarding that information
should always be a priority...
Images for MIDP Devices The MIDP supports the display of bitmapped
images, but not with the flexibility of J2SE. The MIDP specification only
requires support for a single format, the PNG format. PNG was developed
primarily as a replacement for the older GIF, and has the support of the
World Wide Web consortium. Modern web browsers and image editors can load
and save images in PNG format..
HTTP Connections Using Background Threads All user interface
frameworks share some basic concepts. This is true no matter if the UI
framework is the LCDUI classes defined by the MIDP, or the AWT and Swing
classes defined by J2SE. One of the basic concepts is that the user
interface must always be responsive to the user's interaction...
MIDP Gauges The MIDP defines a number of high-level user interface
components. Most of these components are designed to be placed on a
top-level window called a form. Such components are referred to as items,
because they all extend the javax.microedition.lcdui.Item class. The form
itself is an instance of the javax.microedition.lcdui.Form class, and acts
primarily as a container for items...
Splash Screens for MIDlets A splash screen is an informational
screen that presents the name and version of an application, along with
any necessary legal information such as the copyright and trademark
notices. It's something you might want your MIDlets to display on startup.
Adding a splash screen to a MIDlet is easy to do, but there are a few
things to watch out for...
Communication over HTTP using MIDP and Servlets Many, if not most,
MIDP applications have a server-side piece to them. In other words, a
client-server paradigm is used to offload complicated work from the
limited capabilities of the MIDP device to the more capable server
environment. Because the MIDP 1.0 specification only mandates support for
HTTP, all client-server communication must be done through an HTTP
Flicker-Free Graphics with the MIDP The term "double
buffering" refers to a common technique used in computer graphics. If
you consider a device's display to be a memory buffer into which drawing
primitives write (the drawing primitives are the basic drawing methods
such as drawLine and drawArc), with double buffering you draw into a
second, offscreen memory buffer and then copy the entire contents of the
second buffer into the display buffer...
XML in CLDC-based Profiles XML is a portable, text-based way of
representing structured data. More and more applications are using XML to
exchange information, and at some point your CLDC-based applications are
going to need to process XML documents. Over time, even HTML pages will
likely migrate to an XML-based format called XHTML...
the MIDP List Component The MIDP groups its user interface
components into two sets of classes: the high-level API and the low-level
API. With the high-level API you define your user interface using a set of
platform-independent abstractions and let the MIDP implementation decide
the look and behavior of the user interface...
Filtering, and Sorting MIDP Record Stores The RMS, part of the MIDP,
lets you store arbitrary byte arrays as records in a database. The set of
records is referred to as a record store. The RMS assigns a record ID to
each record when it is created. The record ID is an integer greater than
or equal to 1. The application uses this ID to get and set the content of
Connected Device Configuration and the Foundation Profile Much of
what's been written about J2ME talks about the Connected Limited Device
Configuration. The CLDC defines an extremely small subset of the Java
Platform for very limited devices -- devices, like cellular telephones,
that do not have enough memory or enough processing power to handle a
full-blown Java implementation. There is, however, another configuration
available that is midway between the CLDC and a full J2SE implementation:
the Connected Device Profile...
Multiple Simultaneous MIDP Alerts If you write a multithreaded MIDP
application it's easy to trigger two or more alerts simultaneously. In
other words, while one alert is being displayed, a second alert is
triggered. Dealing with this situation is not as simple as you might
think. Alerts are displayed using the two-argument form of the Display
object's setCurrent method...
Timers One of the improvements in version 1.3 of J2SE are classes
that make it simpler to schedule tasks for execution by a background
thread. The MIDP also includes these new classes, so J2ME developers also
Introduction to the High-Level User Interface API: Alerts and Tickers
The MIDP includes both a low-level UI API and a high-level UI API. The
low-level API gives you complete access to a device's screen and to raw
key and pointer events. However, no user interface controls are available
with the low-level API -- your application must explicitly draw buttons
and other familiar controls. This is the price you pay for the flexibility
of the low-level API...
Record Stores Efficiently The data in a record store is stored in
chunks called records. A record is a set of arbitrary binary data,
basically an array of bytes. You always read or write an entire record at
once, using the getRecord, addRecord and setRecord methods of the
the MIDP Low-Level User Interface API With J2ME, profiles are
responsible for defining the user interface (UI) API. The MIDP defines two
such APIs, referred to as the high-level and low-level APIs. The
high-level API requires you to use task-oriented abstractions to define
what the user interface does. You have no real control over what gets
drawn on the screen -- the implementation selects the best approach for
Connections With the CLDC As you can tell from its name, the
Connected Limited Device Configuration (CLDC) is designed for connected
devices. A connected device has the ability to connect to the outside
world, whether the connection is serial, infrared, wireless, or something
else entirely. How then do you take advantage of this connectivity in your
Java applications? The answer is: through a set of classes called the
Generic Connection framework, or GCF for short.
Management System Basics The Mobile Information Device Profile (MIDP)
defines a set of classes for storing and retrieving data. These classes
are called the Record Management System (RMS). With the RMS, it's possible
to make data persist across invocations of a MIDlet. Different MIDlets in
the same MIDlet suite can also use the RMS to share data...
World-Aware J2ME Applications Well-written applications are both
internationalized and localized. An application is internationalized, if
it can correctly handle different encodings of character data. An
application is localized, if it formats and interprets data (dates, times,
timezones, currencies, messages and so on) according to rules specific to
the user's locale. An application that is both internationalized and
localized, can be referred to as "world-aware."...
With Missing J2SE Classes A problem you might run into when writing
J2ME applications is how to deal with missing classes, that is, classes
that are available in J2SE but not in J2ME. Note that J2ME configurations
and profiles include subsets of the J2SE core classes. This means that
specific methods or classes that you would normally use when writing a
J2SE application are not always available. Ideally, you want to maximize
the amount of code that is portable between your J2ME and J2SE
J2ME Development Cycle J2ME is a set of technologies and
specifications that enable Java applications to run on devices such as
cell phones, Personal Digital Assistants, or set top boxes, that are
unable to accommodate the J2SE runtime environment. These devices have
severe resource constraints when compared to desktop or server computers,
limitations that kept the Java Platform off these devices until now...
HTTP Connections with MIDP HTTP connectivity is one of the
requirements of the MIDP. A MIDP-enabled device must be able to interact
with a web server through conventional HTTP requests. If the network
doesn't directly support HTTP, then the device must route its requests
through a gateway. But this is all transparent to the application
|Java Community Process (JCP)
||Java Specification Requests
JSR 82 Java APIs for
Bluetooth Bluetooth is an important emerging standard for wireless
integration of small devices. The specification will standardize a set of
Java APIs to allow these Java-enabled devices to integrate into a
Connected Device Configuration The J2ME Connected Device Configuration
(CDC) provides the basis of the Java 2 platform, Micro Edition for devices
that have a sufficient 32-bit microprocessor and ample memory.
Information Device Profile for the J2ME Platform This specification
will define a profile that will extend and enhance the "J2ME
Connected, Limited Device Configuration" (JSR-000030), enabling
application development for mobile information appliances and voice
Foundation Profile The J2ME Foundation Profile is a set of APIs meant
for applications running on small devices that have some type of network
Profile Specification The J2ME Personal Profile provides the J2ME
environment for those devices with a need for a high degree of Internet
connectivity and web fidelity.
Profile The J2ME RMI Profile provides Java platform to Java platform
remote method invocation for Java devices and interoperates with J2SE RMI.
for the J2ME Platform This profile will provide user interface and
data storage APIs for small, resource-limited handheld devices. It is
based on the Connected, Limited Device Configuration (CLDC).
Information Device Next Generation This specification will define a
profile that will extend and enhance the "J2ME Mobile Information
Device Profile" (JSR-000037).
Telephony Communication APIs (WTCA) The purpose of this JSR is to
define a set of optional APIs that provides standard access to wireless
communication resources. This will allow 3rd party developers to build
intelligent connected Java applications.
Limited Device Configuration, Next Generation This specification will
define a revised version of the J2METM Connected, Limited Device
|Java Developers Journal (JDJ)
Started with Java on PDAs (2/02) PDAs are becoming a permanent fixture
in the everyday lives of consumers and business people. There's no
question that we have Palm to thank for bringing us a small, pen-based,
easy-to-use organizer to help keep our busy lives on track. At the same
time, Microsoft has been trying to hit one out of the park for years with
its Windows CE operating system running on a variety of handheld devices.
Tutorial, Part 1: Creating MIDlets Java 2 Micro Edition (J2ME)
combines a resource-constrained JVM and a set of Java APIs for developing
applications for mobile devices. This article is the first in a series.
This time, after a quick introduction to J2ME, I will provide a
step-by-step guide to creating J2ME applications, also known as MIDlets,
using a simple example. This will cover how to test and deploy these
MIDlets as well. Finally, I will round out this installment with a look at
the lifecycle of a MIDlet.
||Do you need a mobile telephone with Java? Are you searching for Java
virtual machine for your PDA? You want to know what is this wireless Java
about? You will find answers to all these questions here, at
wireless applications using J2ME Update on Java support for mobile
phones, two-way pagers, and related consumer products. Learn more about
programming mobile devices and consumer gadgets of all sorts in Bill Day's
report from JavaOne on the Java 2 Platform, Micro Edition.
wireless sessions with J2ME/MIDP (4/02) Every e-commerce application
must support session tracking. Unfortunately, MIDP (Mobile Information
Device Profile), a J2ME (Java 2 Platform, Micro Edition) technology,
supports only the standard HTTP protocol, which is stateless. In this
article, Michael Juntao Yuan and Ju Long explore ways to add session
support into the current MIDP network API framework...
Micro Java Devices,
2 Micro Edition (J2ME), KVM,
and Micro Java Development When I heard the crunch of my phone
underneath the tire of the car I had two concurrent thoughts blare in my
head: 1. You Idiot! Why didn't you make sure that you left your phone in
the car when you got out to push it out of the snow bank? 2. I wish all
that info I spent hours keying into my phone was wirelessly synchronized
to my office network. Until mobile devices have the ability to be
constantly connected to a network, and are made of the same substance as
the famous "black box", synchronization is an integral component
of the wireless application architecture.
To Midlets And The Display A MIDlet is a Java application designed to
run on a mobile device. There are two core Java libraries that make up the
develop-ment environment for these mobile applications, the Connected,
Limited Device Configuration (CLDC) and the Mobile Information Device
Handling Through the Item Object Event processing is essential to most
every MIDlet. It's hard to imagine an application where there is no user
interaction what-so-ever, even if this interaction is as simple as
requesting to start or stop a MIDlet. In this article we'll learn the
specifics of event handling using the MIDP Command object.
MIDP Example Applications Animated Example MIDlet, Networked MIDlet
Example, Workflow Application Example, Game MIDlet Example Using The Nokia
UI API, Nokia UI API Sound Example...
Platforms: Guidelines For Testing J2ME Applications v1.0 This document
lists fundamental issues that must be taken into account when testing J2MEô
BREW Games to Java MIDP v1.0 This document assists developers who want
to port BREW games to the J2ME platform, and who want to plan the
development of BREW titles to make it easier to port them.
|O'Reilly Network ONJava
2ME and MIDP Development Welcome to the world of MIDlets. A MIDlet is
a Java application that conforms to the specifications set out by the
Connected, Limited Device Configuration (CLDC) and the Mobile Information
Device Profile (MIDP)...
First Micro Java Game (12/02) Mobile phone manufacturers have embraced
Java in a way that not even PC manufacturers have. Java is clearly one of
the platforms of choice for mobile devices, and an ideal language for
throwing together mobile games. The Mobile Information Device Profile
(MIDP) of J2ME is a subset of the standard Java you know and love, with a
few minor modifications. Writing a basic MIDlet game is simple as apple
pie. This article will show you how to start cookin'.
Basis Profile vs. Personal Profile: What's the Difference? (5/03) For
a long while, all the excitement in J2ME was centered on the Connected
Limited Device Configuration (CLDC), released in final form in May, 2000.
The first CLDC-based profile, the MIDP, followed two months later. MIDP
garnered much interest in the Java community because it defined a new
application model, as well as classes for user interface and persistence.
In other words, it provided a complete environment for deploying and
running interactive applications.
Low-Level Network Programming with MIDP 2.0 (4/03) Version 1.0 of the
Mobile Information Device Profile (MIDP) lacks low-level networking
support for TCP/IP sockets and UDP/IP datagrams, but the MIDP 2.0
specification (JSR 118) has responded to the needs of the 2.5G and 3G
networks now being deployed by adding support for sockets and datagrams,
thus providing mobile applications more capable networking interfaces.
Software Design Techniques What every wireless software developer should
know (5/02) Developing applications for devices with limited resources
requires skillful developers who are willing to learn and understand how
the wireless environment operates, and able to make intelligent decisions
regarding software architecture and performance issues. The purpose of
this article is to enlighten you about concerns you should keep in mind
when developing J2ME applications.
MIDP Code Samples
This page provides links to a variety of code samples that use the MIDP
APIs. M-Commerce, Alerts and Timers, Event Handling, Internationalization,
Network Connections, Persistent Storage, Getting Started, Servlets, User
for Home Appliances and Consumer Electronic Devices (1/03) Describes
the CDC, related profiles, and how to develop applications for consumer
and embedded devices.
Internet Developer's Guide to J2ME One of your jobs as a Web developer
is to track up-and-coming technologies that affect how you write and
deploy applications. You're probably familiar with Java as a server-side
development language even though most people turn to DHTML instead of Java
for building client applications. However, a new kind of client-based Java
is on the horizon. It's the Java 2 Micro Edition, or J2ME for short. J2ME
has the chance to succeed where applets failed.
|Wireless Dev Net
Programming with J2ME Wireless Devices The wireless devices such as
cell phones and two-way pagers keep their owners connected to the outside
world at anytime from anywhere. They offer great connectivity that other
types of devices couldnít offer. Application development for these
wireless devices is going to be in great demand for the next couple years.
Network programming plays an important role in wireless application
development to take advantage of the connectivity these devices have to
Click here to suggest a site
for this listing.