Java Tutorial/J2ME/MIDlet

Материал из Java эксперт
Перейти к: навигация, поиск

A first MIDlet with simple text and a few commands

   <source lang="java">

/* License

* 
* Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved.
* 
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*  
*  * Redistribution of source code must retain the above copyright notice,
*      this list of conditions and the following disclaimer.
* 
*  * Redistribution in binary form must reproduce the above copyright notice,
*      this list of conditions and the following disclaimer in the
*      documentation and/or other materials provided with the distribution.
* 
* Neither the name of Sun Microsystems, Inc. or the names of contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*  
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*  
* You acknowledge that this software is not designed, licensed or intended
* for use in the design, construction, operation or maintenance of any
* nuclear facility. 
*/

import javax.microedition.lcdui.rumand; import javax.microedition.lcdui.rumandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.TextBox; import javax.microedition.midlet.MIDlet; // A first MIDlet with simple text and a few commands. public class SimpleTextCommandMIDlet extends MIDlet implements CommandListener {

 // The exit, info, and buy commands
 private Command exitCommand;
 private Command infoCommand;
 private Command buyCommand;
 // The display for this MIDlet
 private Display display;
 public SimpleTextCommandMIDlet() {
   display = Display.getDisplay(this);
   exitCommand = new Command("Exit", Command.SCREEN, 1);
   infoCommand = new Command("Info", Command.SCREEN, 2);
   buyCommand = new Command("Buy", Command.SCREEN, 2);
 }
 // Start the MIDlet by creating the TextBox and
 // associating the exit command and listener.
 public void startApp() {
   TextBox t = new TextBox("FirstMIDlet", "Welcome to MIDP Programming", 256,
       0);
   t.addCommand(exitCommand);
   t.addCommand(infoCommand);
   t.addCommand(buyCommand);
   t.setCommandListener(this);
   display.setCurrent(t);
 }
 // Pause is a no-op because there are no background
 // activities or record stores to be closed.
 public void pauseApp() {
 }
 // Destroy must cleanup everything not handled
 // by the garbage collector.
 // In this case there is nothing to cleanup.
 public void destroyApp(boolean unconditional) {
 }
 // Respond to commands. Here we are only implementing
 // the exit command. In the exit command, cleanup and
 // notify that the MIDlet has been destroyed.
 public void commandAction(Command c, Displayable s) {
   if (c == exitCommand) {
     destroyApp(false);
     notifyDestroyed();
   }
 }

}</source>





detect and report MIDlet run-time environment

   <source lang="java">

/* License

* 
* Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved.
* 
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*  
*  * Redistribution of source code must retain the above copyright notice,
*  this list of conditions and the following disclaimer.
* 
*  * Redistribution in binary form must reproduce the above copyright notice,
*  this list of conditions and the following disclaimer in the
*  documentation and/or other materials provided with the distribution.
* 
* Neither the name of Sun Microsystems, Inc. or the names of contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*  
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*  
* You acknowledge that this software is not designed, licensed or intended
* for use in the design, construction, operation or maintenance of any
* nuclear facility. 
*/

/* imports */ import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class J2MEEnvMyMidlet extends MIDlet {

 /**
  * PropertyOutput - lookup and report one application property.
  */
 private void PropertyOutput(String key) {
   String value = getAppProperty(key);
   if (value != null)
     System.out.println(key + " = " + value);
 }
 /**
  * PropertyReport - detect and report MIDlet run-time environment.
  */
 private void PropertyReport() {
   final int Npush = 10; /* maximum number of Push"s to report */
   final int Nmidlet = 10; /* maximum number of MIDlet"s to report */
   final String key[] = { /* standard names */
   "MIDlet-Name", "MIDlet-Version", "MIDlet-Vendor", "MIDlet-Icon",
       "MIDlet-Description", "MIDlet-Info-URL", "MIDlet-Jar-URL",
       "MIDlet-Jar-Size", "MIDlet-Data-Size", "MicroEdition-Profile",
       "MicroEdition-Configuration", "MIDlet-Permissions",
       "MIDlet-Permissions-Opt", "MIDlet-Install-Notify",
       "MIDlet-Delete-Notify", "MIDlet-Delete-Confirm", null };
   final String push_key = "MIDlet-Push-";
   final String midlet_key = "MIDlet-";
   int i;
   for (i = 0; key[i] != null; ++i)
     /* report standard properties */
     PropertyOutput(key[i]);
   for (i = 1; i <= Npush; ++i)
     /* report push entries */
     PropertyOutput(push_key + i);
   for (i = 1; i <= Nmidlet; ++i)
     /* report MIDlet entries */
     PropertyOutput(midlet_key + i);
   return;
 }
 /**
  * MyMIDlet - constructor
  */
 public J2MEEnvMyMidlet() {
   PropertyReport();
 }
 /**
  * startApp - MIDlet has entered the Active state.
  */
 public void startApp() {
 }
 /**
  * pauseApp - enter the Paused state.
  */
 public void pauseApp() {
 }
 /**
  * destroyApp - enter the Destroyed state.
  * 
  * @param unconditional
  */
 public void destroyApp(boolean unconditional)
     throws MIDletStateChangeException {
   if (unconditional == false) {
     throw new MIDletStateChangeException();
   }
 }

} /* Running with storage root C:\Documents and Settings\Administrator\j2mewtk\2.5.2\appdb\MediaControlSkin Running with locale: English_United States.1252 Running in the identified_third_party security domain No audio device found. MIDlet-Name = Main Midlet Suite MIDlet-Version = 1.0.0 MIDlet-Vendor = Midlet Suite Vendor MIDlet-Jar-URL = Main.jar MIDlet-Jar-Size = 1691 MicroEdition-Profile = MIDP-2.0 MicroEdition-Configuration = CLDC-1.1 Execution completed. 3399135 bytecodes executed 166 thread switches 1667 classes in the system (including system classes) 17751 dynamic objects allocated (535200 bytes) 2 garbage collections (457948 bytes collected)

  • /</source>





extends MIDlet

   <source lang="java">

import javax.microedition.lcdui.Display; import javax.microedition.lcdui.TextBox; import javax.microedition.midlet.MIDlet; public class J2MEHiSmallWorld extends MIDlet {

 private TextBox textbox;
 public J2MEHiSmallWorld() {
   textbox = new TextBox("", "Hi Small World!", 20, 0);
 }
 public void startApp() {
   Display.getDisplay(this).setCurrent(textbox);
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }

}</source>





KVM Properties

   <source lang="java">

public class KVMProperties {

   private static final String[] properties = {
       "microedition.configuration",
       "microedition.encoding",
       "microedition.platform",
       "microedition.profiles"
   };
   
   public static void main(String[] args) {
       for (int i = 0; i < properties.length; i++) {
           System.out.println(properties[i] + " = " +
                               System.getProperty(properties[i]));
       }
   }

}</source>





list Capabilities

   <source lang="java">

import javax.microedition.lcdui.Choice; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.List; import javax.microedition.midlet.MIDlet; public class CapabilitiesMIDlet extends MIDlet {

 private String[] capabilitiesIdx = { "microedition.media.version", "supports.mixing",
     "supports.audio.capture", "supports.video.capture", "supports.recording", "audio.encodings",
     "video.encodings", "video.snapshot.encodings", "streamable.contents" };
 public void startApp() {
   List list = new List("Audio/Video Capabilities", Choice.IMPLICIT);
   for (int i = 0; i < capabilitiesIdx.length; ++i) {
     list.append(System.getProperty(capabilitiesIdx[i]) + " - " + capabilitiesIdx[i], null);
   }
   Display.getDisplay(this).setCurrent(list);
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }

}</source>





Retrieving the predefined properties

   <source lang="java">

import java.io.IOException; import java.io.InputStream; import javax.microedition.midlet.MIDlet; public class RuntimeAccessMIDlet extends MIDlet {

 public void startApp() {
   System.out.println("MIDlet-Name: " + getAppProperty("MIDlet-Name"));
   System.out.println("MIDlet-Vendor: " + getAppProperty("MIDlet-Vendor"));
   System.out.println("MIDlet-Version: " + getAppProperty("MIDlet-Version"));
   System.out.println("MIDlet-Description: " + getAppProperty("MIDlet-Description"));
   System.out.println("Target-Devices: " + getAppProperty("Target-Devices"));
   System.out.println("Display-Size: " + getAppProperty("Display-Size"));
   InputStream is = this.getClass().getResourceAsStream("/readme.txt");
   try {
     if (is != null) {
       int character;
       while ((character = is.read()) != -1) {
         System.out.print((char) character);
       }
       is.close();
     }
   } catch (IOException e) {
     System.out.println(e);
   }
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }

}</source>





Skeleton of a MIDlet

   <source lang="java">

import javax.microedition.midlet.MIDlet; public class MyMIDlet extends MIDlet {

 public MyMIDlet() {
   // constructor
 }
 public void startApp() {
   // entering active state
 }
 public void pauseApp() {
   // entering paused state
 }
 public void destroyApp() {
   // entering destroyed state
 }

}</source>