<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FJ2ME%2FTicker</id>
		<title>Java/J2ME/Ticker - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FJ2ME%2FTicker"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/J2ME/Ticker&amp;action=history"/>
		<updated>2026-04-22T01:54:46Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/J2ME/Ticker&amp;diff=7259&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/J2ME/Ticker&amp;diff=7259&amp;oldid=prev"/>
				<updated>2010-06-01T06:37:43Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:37, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/J2ME/Ticker&amp;diff=7258&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/J2ME/Ticker&amp;diff=7258&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Quotes MIDlet ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Learning Wireless Java&lt;br /&gt;
Help for New J2ME Developers&lt;br /&gt;
By Qusay Mahmoud&lt;br /&gt;
ISBN: 0-596-00243-2&lt;br /&gt;
*/&lt;br /&gt;
import java.util.Enumeration;&lt;br /&gt;
import javax.microedition.rms.*;&lt;br /&gt;
import javax.microedition.lcdui.*;&lt;br /&gt;
import javax.microedition.midlet.*;&lt;br /&gt;
import javax.microedition.io.*;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
public class QuotesMIDlet extends MIDlet implements CommandListener {&lt;br /&gt;
   Display display = null;&lt;br /&gt;
   List menu = null; // main menu&lt;br /&gt;
   List choose = null;&lt;br /&gt;
   TextBox input = null;&lt;br /&gt;
   Ticker ticker = new Ticker(&amp;quot;Database Application&amp;quot;);&lt;br /&gt;
   String quoteServer = &lt;br /&gt;
   &amp;quot;http://quote.yahoo.ru/d/quotes.csv?s=&amp;quot;;&lt;br /&gt;
   String quoteFormat = &amp;quot;&amp;amp;f=slc1wop&amp;quot;; // The only quote format supported&lt;br /&gt;
   static final Command backCommand = new Command(&amp;quot;Back&amp;quot;, Command.BACK, 0);&lt;br /&gt;
   static final Command mainMenuCommand = new Command(&amp;quot;Main&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
   static final Command saveCommand = new Command(&amp;quot;Save&amp;quot;, Command.OK, 2);&lt;br /&gt;
   static final Command exitCommand = new Command(&amp;quot;Exit&amp;quot;, Command.STOP, 3);&lt;br /&gt;
   String currentMenu = null;&lt;br /&gt;
   // Stock data&lt;br /&gt;
   String name, date, price;&lt;br /&gt;
    &lt;br /&gt;
   // record store&lt;br /&gt;
   StockDB db = null;&lt;br /&gt;
   public QuotesMIDlet() { // constructor&lt;br /&gt;
   }&lt;br /&gt;
   // start the MIDlet&lt;br /&gt;
   public void startApp() throws MIDletStateChangeException {&lt;br /&gt;
      display = Display.getDisplay(this);&lt;br /&gt;
      // open a db stock file&lt;br /&gt;
      try {&lt;br /&gt;
         db = new StockDB(&amp;quot;mystocks&amp;quot;);&lt;br /&gt;
      } catch(Exception e) {}&lt;br /&gt;
         menu = new List(&amp;quot;Stocks Database&amp;quot;, Choice.IMPLICIT);&lt;br /&gt;
         menu.append(&amp;quot;List Stocks&amp;quot;, null);&lt;br /&gt;
         menu.append(&amp;quot;Add A New Stock&amp;quot;, null);&lt;br /&gt;
         menu.addCommand(exitCommand);&lt;br /&gt;
         menu.setCommandListener(this);&lt;br /&gt;
         menu.setTicker(ticker);&lt;br /&gt;
         mainMenu();&lt;br /&gt;
   }&lt;br /&gt;
   public void pauseApp() {&lt;br /&gt;
      display = null;&lt;br /&gt;
      choose = null;&lt;br /&gt;
      menu = null;&lt;br /&gt;
      ticker = null;&lt;br /&gt;
       &lt;br /&gt;
      try {&lt;br /&gt;
         db.close();&lt;br /&gt;
         db = null;&lt;br /&gt;
      } catch(Exception e) {}&lt;br /&gt;
   }&lt;br /&gt;
   public void destroyApp(boolean unconditional) {&lt;br /&gt;
      try {&lt;br /&gt;
         db.close();&lt;br /&gt;
      } catch(Exception e) {}&lt;br /&gt;
      notifyDestroyed();&lt;br /&gt;
   }&lt;br /&gt;
   void mainMenu() {&lt;br /&gt;
      display.setCurrent(menu);&lt;br /&gt;
      currentMenu = &amp;quot;Main&amp;quot;; &lt;br /&gt;
   }&lt;br /&gt;
   // Construct a running ticker &lt;br /&gt;
   // with stock names and prices&lt;br /&gt;
   public String tickerString() {&lt;br /&gt;
      StringBuffer ticks = null;&lt;br /&gt;
      try {&lt;br /&gt;
         RecordEnumeration e = db.enumerate();&lt;br /&gt;
         ticks = new StringBuffer();&lt;br /&gt;
         while(e.hasNextElement()) {&lt;br /&gt;
            String stock1 = new String(e.nextRecord());&lt;br /&gt;
            ticks.append(Stock.getName(stock1));&lt;br /&gt;
            ticks.append(&amp;quot; @ &amp;quot;);&lt;br /&gt;
            ticks.append(Stock.getPrice(stock1));&lt;br /&gt;
            ticks.append(&amp;quot;    &amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
      } catch(Exception ex) {}&lt;br /&gt;
         return (ticks.toString());&lt;br /&gt;
   }&lt;br /&gt;
   // Add a new stock to the record store &lt;br /&gt;
   // by calling StockDB.addNewStock()&lt;br /&gt;
   public void addStock() {&lt;br /&gt;
      input = new TextBox(&amp;quot;Enter a Stock Name:&amp;quot;, &amp;quot;&amp;quot;, 5, TextField.ANY);&lt;br /&gt;
      input.setTicker(ticker);&lt;br /&gt;
      input.addCommand(saveCommand);&lt;br /&gt;
      input.addCommand(backCommand);&lt;br /&gt;
      input.setCommandListener(this);&lt;br /&gt;
      input.setString(&amp;quot;&amp;quot;);&lt;br /&gt;
      display.setCurrent(input);&lt;br /&gt;
      currentMenu = &amp;quot;Add&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   // Connect to quote.yahoo.ru and &lt;br /&gt;
   // retrieve the data for a given &lt;br /&gt;
   // stock symbol.&lt;br /&gt;
   public String getQuote(String input) throws IOException, NumberFormatException {&lt;br /&gt;
      String url = quoteServer + input + quoteFormat;&lt;br /&gt;
      StreamConnection c = (StreamConnection)Connector.open(&lt;br /&gt;
                            url, Connector.READ_WRITE);&lt;br /&gt;
      InputStream is = c.openInputStream();&lt;br /&gt;
      StringBuffer sb = new StringBuffer();&lt;br /&gt;
      int ch;&lt;br /&gt;
      while((ch = is.read()) != -1) {&lt;br /&gt;
        sb.append((char)ch);&lt;br /&gt;
      }&lt;br /&gt;
      return(sb.toString());&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // List the stocks in the record store&lt;br /&gt;
   public void listStocks() {&lt;br /&gt;
      choose = new List(&amp;quot;Choose Stocks&amp;quot;, Choice.MULTIPLE);&lt;br /&gt;
      choose.setTicker(new Ticker(tickerString()));&lt;br /&gt;
      choose.addCommand(backCommand);&lt;br /&gt;
      choose.setCommandListener(this);&lt;br /&gt;
      try {&lt;br /&gt;
         RecordEnumeration re = db.enumerate();&lt;br /&gt;
         while(re.hasNextElement()) {&lt;br /&gt;
            String theStock = new String(re.nextRecord());&lt;br /&gt;
            choose.append(Stock.getName(theStock)+&amp;quot; @ &amp;quot; +&lt;br /&gt;
                          Stock.getPrice(theStock),null);&lt;br /&gt;
         }&lt;br /&gt;
      } catch(Exception ex) {}&lt;br /&gt;
      display.setCurrent(choose);&lt;br /&gt;
      currentMenu = &amp;quot;List&amp;quot;; &lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   // Handle command events &lt;br /&gt;
   public void commandAction(Command c, Displayable d) {&lt;br /&gt;
      String label = c.getLabel();&lt;br /&gt;
      if (label.equals(&amp;quot;Exit&amp;quot;)) {&lt;br /&gt;
         destroyApp(true);&lt;br /&gt;
      } else if (label.equals(&amp;quot;Save&amp;quot;)) {&lt;br /&gt;
         if(currentMenu.equals(&amp;quot;Add&amp;quot;)) {&lt;br /&gt;
            // add it to database&lt;br /&gt;
            try {&lt;br /&gt;
               String userInput = input.getString();&lt;br /&gt;
              String pr = getQuote(userInput);&lt;br /&gt;
              db.addNewStock(pr);&lt;br /&gt;
              ticker.setString(tickerString()); &lt;br /&gt;
            } catch(IOException e) {&lt;br /&gt;
            } catch(NumberFormatException se) {&lt;br /&gt;
            }&lt;br /&gt;
            mainMenu();&lt;br /&gt;
          } &lt;br /&gt;
      } else if (label.equals(&amp;quot;Back&amp;quot;)) {&lt;br /&gt;
         if(currentMenu.equals(&amp;quot;List&amp;quot;)) {&lt;br /&gt;
            // go back to menu&lt;br /&gt;
            mainMenu();&lt;br /&gt;
         } else if(currentMenu.equals(&amp;quot;Add&amp;quot;)) {&lt;br /&gt;
            // go back to menu&lt;br /&gt;
            mainMenu();&lt;br /&gt;
         }&lt;br /&gt;
      } else {&lt;br /&gt;
         List down = (List)display.getCurrent();&lt;br /&gt;
         switch(down.getSelectedIndex()) {&lt;br /&gt;
            case 0: listStocks();break;&lt;br /&gt;
            case 1: addStock();break;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class StockDB {&lt;br /&gt;
   RecordStore recordStore = null;&lt;br /&gt;
   public StockDB() {}&lt;br /&gt;
   // Open a record store with the given name&lt;br /&gt;
   public StockDB(String fileName) {&lt;br /&gt;
      try {&lt;br /&gt;
         recordStore = RecordStore.openRecordStore(fileName, true);&lt;br /&gt;
      } catch(RecordStoreException rse) {&lt;br /&gt;
         rse.printStackTrace();&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   // Close the record store&lt;br /&gt;
   public void close() throws RecordStoreNotOpenException,RecordStoreException {&lt;br /&gt;
      if (recordStore.getNumRecords() == 0) {&lt;br /&gt;
         String fileName = recordStore.getName();&lt;br /&gt;
         recordStore.closeRecordStore();&lt;br /&gt;
         recordStore.deleteRecordStore(fileName);&lt;br /&gt;
      } else {&lt;br /&gt;
         recordStore.closeRecordStore();&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   // Add a new record (stock) &lt;br /&gt;
   // to the record store&lt;br /&gt;
   public synchronized void addNewStock(String record) {&lt;br /&gt;
      ByteArrayOutputStream baos = new ByteArrayOutputStream();&lt;br /&gt;
      DataOutputStream outputStream = new DataOutputStream(baos);&lt;br /&gt;
      try {&lt;br /&gt;
         outputStream.writeUTF(record);&lt;br /&gt;
      } catch (IOException ioe) {&lt;br /&gt;
         System.out.println(ioe);&lt;br /&gt;
         ioe.printStackTrace();&lt;br /&gt;
      }&lt;br /&gt;
      byte[] b = baos.toByteArray();&lt;br /&gt;
      try {&lt;br /&gt;
         recordStore.addRecord(b, 0, b.length);&lt;br /&gt;
      } catch (RecordStoreException rse) {&lt;br /&gt;
         System.out.println(rse);&lt;br /&gt;
         rse.printStackTrace();&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   // Enumerate through the records.&lt;br /&gt;
   public synchronized RecordEnumeration enumerate() throws&lt;br /&gt;
                       RecordStoreNotOpenException {&lt;br /&gt;
      return recordStore.enumerateRecords(null, null, false);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
class Stock {&lt;br /&gt;
   private static String name, time, price;&lt;br /&gt;
   // Given a quote from the server, &lt;br /&gt;
   // retrieve the name, &lt;br /&gt;
   //price, and date of the stock&lt;br /&gt;
   public static void parse(String data) {&lt;br /&gt;
      int index = data.indexOf(&amp;quot;&amp;quot;&amp;quot;); &lt;br /&gt;
      name = data.substring(++index,(index = data.indexOf(&amp;quot;&amp;quot;&amp;quot;, index)));&lt;br /&gt;
      index +=3;&lt;br /&gt;
      time = data.substring(index, (index = data.indexOf(&amp;quot;-&amp;quot;, index))-1);&lt;br /&gt;
      index +=5;&lt;br /&gt;
      price = data.substring(index, (index = data.indexOf(&amp;quot;&amp;lt;&amp;quot;, index)));&lt;br /&gt;
   }&lt;br /&gt;
   // Get the name of the stock from &lt;br /&gt;
   // the record store&lt;br /&gt;
   public static String getName(String record) {&lt;br /&gt;
      parse(record);&lt;br /&gt;
      return(name);&lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   // Get the price of the stock from &lt;br /&gt;
   // the record store&lt;br /&gt;
   public static String getPrice(String record) {&lt;br /&gt;
      parse(record);&lt;br /&gt;
      return(price);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Shared Ticker ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*--------------------------------------------------&lt;br /&gt;
* SharedTicker.java&lt;br /&gt;
*&lt;br /&gt;
* Example from the book:     Core J2ME Technology&lt;br /&gt;
* Copyright John W. Muchow   http://www.CoreJ2ME.ru&lt;br /&gt;
* You may use/modify for any non-commercial purpose&lt;br /&gt;
*-------------------------------------------------*/&lt;br /&gt;
import javax.microedition.midlet.*;&lt;br /&gt;
import javax.microedition.lcdui.*;&lt;br /&gt;
public class SharedTicker extends MIDlet implements CommandListener&lt;br /&gt;
{&lt;br /&gt;
  private Display display;    // Reference to Display object&lt;br /&gt;
  private List lsProducts;   // Main productlist&lt;br /&gt;
  private Alert alHelp;      // Alert to show text and image&lt;br /&gt;
  private Ticker tkSale;     // Ticker of what&amp;quot;s on sale&lt;br /&gt;
  private Command cmExit;    // Command to exit the MIDlet&lt;br /&gt;
 &lt;br /&gt;
  public SharedTicker()&lt;br /&gt;
  {&lt;br /&gt;
    display = Display.getDisplay(this);&lt;br /&gt;
    &lt;br /&gt;
    cmExit = new Command(&amp;quot;Exit&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
    tkSale = new Ticker(&amp;quot;Current Sale: Torchiere Lamp only $29.00&amp;quot;);&lt;br /&gt;
    lsProducts = new List(&amp;quot;Products&amp;quot;, Choice.IMPLICIT);&lt;br /&gt;
    lsProducts.append(&amp;quot;Floor Lamp&amp;quot;, null);&lt;br /&gt;
    lsProducts.append(&amp;quot;Chandelier&amp;quot;, null);&lt;br /&gt;
    lsProducts.append(&amp;quot;Help&amp;quot;, null);    &lt;br /&gt;
    lsProducts.addCommand(cmExit);&lt;br /&gt;
    lsProducts.setCommandListener(this);&lt;br /&gt;
    lsProducts.setTicker(tkSale);&lt;br /&gt;
  }&lt;br /&gt;
  public void startApp()&lt;br /&gt;
  {&lt;br /&gt;
    display.setCurrent(lsProducts);&lt;br /&gt;
  }&lt;br /&gt;
  public void pauseApp()&lt;br /&gt;
  { &lt;br /&gt;
  }&lt;br /&gt;
  public void destroyApp(boolean unconditional)&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
  public void showAlert()&lt;br /&gt;
  {&lt;br /&gt;
    try&lt;br /&gt;
    { &lt;br /&gt;
      // Create an image&lt;br /&gt;
      Image im = Image.createImage(&amp;quot;/help.png&amp;quot;);&lt;br /&gt;
      // Create Alert, add text and image, no sound&lt;br /&gt;
      alHelp = new Alert(&amp;quot;Help Information&amp;quot;, &lt;br /&gt;
                          &amp;quot;Over 300 unique lighting products!&amp;quot;, &lt;br /&gt;
                          im, null);&lt;br /&gt;
      alHelp.setTimeout(Alert.FOREVER);                          &lt;br /&gt;
      alHelp.setTicker(tkSale);&lt;br /&gt;
    }    &lt;br /&gt;
    catch(Exception e)&lt;br /&gt;
    {&lt;br /&gt;
      System.out.println(&amp;quot;Unable to read png image.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Display the Alert. Once dismissed, return to product list&lt;br /&gt;
    display.setCurrent(alHelp, lsProducts);      &lt;br /&gt;
  }&lt;br /&gt;
  public void commandAction(Command c, Displayable s)&lt;br /&gt;
  {&lt;br /&gt;
    &lt;br /&gt;
    if (c == List.SELECT_COMMAND)&lt;br /&gt;
    {&lt;br /&gt;
      switch (lsProducts.getSelectedIndex())&lt;br /&gt;
      {&lt;br /&gt;
        case 0:&lt;br /&gt;
          System.out.println(&amp;quot;Floor Lamp selected&amp;quot;);            &lt;br /&gt;
          break;&lt;br /&gt;
  &lt;br /&gt;
        case 1:&lt;br /&gt;
          System.out.println(&amp;quot;Chandelier selected&amp;quot;);            &lt;br /&gt;
          break;&lt;br /&gt;
          &lt;br /&gt;
        case 2:&lt;br /&gt;
          showAlert();&lt;br /&gt;
          break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else if (c == cmExit)&lt;br /&gt;
    {&lt;br /&gt;
      destroyApp(true);&lt;br /&gt;
      notifyDestroyed();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stock Watcher ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* License&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *  &lt;br /&gt;
 *  * Redistribution of source code must retain the above copyright notice,&lt;br /&gt;
 *      this list of conditions and the following disclaimer.&lt;br /&gt;
 * &lt;br /&gt;
 *  * Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *      this list of conditions and the following disclaimer in the&lt;br /&gt;
 *      documentation and/or other materials provided with the distribution.&lt;br /&gt;
 * &lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors&lt;br /&gt;
 * may be used to endorse or promote products derived from this software&lt;br /&gt;
 * without specific prior written permission.&lt;br /&gt;
 *  &lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *  &lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility. &lt;br /&gt;
 */&lt;br /&gt;
import javax.microedition.midlet.*;&lt;br /&gt;
import javax.microedition.lcdui.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
public class StockWatcher extends MIDlet {&lt;br /&gt;
  Display      display;&lt;br /&gt;
  Ticker       ticker = new Ticker( &amp;quot;&amp;quot; );&lt;br /&gt;
  Command      exitCommand = new Command( &lt;br /&gt;
                                             &amp;quot;Exit&amp;quot;, Command.EXIT, 1 );&lt;br /&gt;
  Timer        timer = new Timer();&lt;br /&gt;
  StockChecker checker = new StockChecker();&lt;br /&gt;
  TickerForm   form = new TickerForm();&lt;br /&gt;
  Alert        alert = new Alert( &amp;quot;Stock Alert!&amp;quot; );&lt;br /&gt;
  public StockWatcher() {&lt;br /&gt;
    display = Display.getDisplay( this );&lt;br /&gt;
    alert.setTimeout( Alert.FOREVER );&lt;br /&gt;
  }&lt;br /&gt;
  protected void destroyApp( boolean unconditional ) { }&lt;br /&gt;
  protected void startApp() {&lt;br /&gt;
    display.setCurrent( form );&lt;br /&gt;
    timer.schedule( checker, 0, 30000 );&lt;br /&gt;
  }&lt;br /&gt;
  protected void pauseApp() { }&lt;br /&gt;
  public void exit(){&lt;br /&gt;
    timer.cancel();&lt;br /&gt;
    destroyApp( true );&lt;br /&gt;
    notifyDestroyed();&lt;br /&gt;
  }&lt;br /&gt;
  // Display a simple form to hold the ticker&lt;br /&gt;
  class TickerForm extends Form implements CommandListener {&lt;br /&gt;
    public TickerForm(){&lt;br /&gt;
      super( &amp;quot;Stock Watch&amp;quot; );&lt;br /&gt;
      setTicker( ticker );&lt;br /&gt;
      addCommand( exitCommand );&lt;br /&gt;
      setCommandListener( this );&lt;br /&gt;
    }&lt;br /&gt;
    public void commandAction( Command c, Displayable d ){&lt;br /&gt;
      exit();&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
                    &lt;br /&gt;
 // Check the stock values and put up an alert if&lt;br /&gt;
 // they&amp;quot;re beyond certain limits....&lt;br /&gt;
 class StockChecker extends TimerTask {&lt;br /&gt;
   Random       generator = new Random();&lt;br /&gt;
   int          sybsValue = 20000;&lt;br /&gt;
   int          sunwValue = 30000;&lt;br /&gt;
   int          ibmValue = 40000;&lt;br /&gt;
   StringBuffer buf = new StringBuffer();&lt;br /&gt;
   public void run(){&lt;br /&gt;
     String values = getStockValues();&lt;br /&gt;
     ticker.setString( values );&lt;br /&gt;
     if( sybsValue &amp;lt; 18000 || sybsValue &amp;gt; 22000 ||&lt;br /&gt;
          sunwValue &amp;lt; 28000 || sunwValue &amp;gt; 32000 ||&lt;br /&gt;
          ibmValue &amp;lt; 38000 || ibmValue &amp;gt; 42000 ){&lt;br /&gt;
       alert.setString( values );&lt;br /&gt;
     }&lt;br /&gt;
     if( !alert.isShown() ){&lt;br /&gt;
       display.setCurrent( alert, form );&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   private String getStockValues(){&lt;br /&gt;
     sybsValue = randomStockValue( sybsValue );&lt;br /&gt;
     sunwValue = randomStockValue( sunwValue );&lt;br /&gt;
     ibmValue = randomStockValue( ibmValue );&lt;br /&gt;
     buf.setLength( 0 );&lt;br /&gt;
     appendValue( &amp;quot;SYBS&amp;quot;, sybsValue );&lt;br /&gt;
     appendValue( &amp;quot;SUNW&amp;quot;, sunwValue );&lt;br /&gt;
     appendValue( &amp;quot;IBM&amp;quot;, ibmValue );&lt;br /&gt;
     return buf.toString();&lt;br /&gt;
   }&lt;br /&gt;
   // Generate a random stock value... in the&lt;br /&gt;
   // real world you&amp;quot;d use HTTP to obtain the&lt;br /&gt;
   // stock value from a broker&amp;quot;s website.&lt;br /&gt;
   private int randomStockValue( int oldVal ){&lt;br /&gt;
     int incr1 = ( generator.nextInt() % 2 );&lt;br /&gt;
     int incr2 = ( generator.nextInt() % 16 );&lt;br /&gt;
     if( incr1 &amp;lt; 1 ){&lt;br /&gt;
       oldVal -= incr1 * 1000;&lt;br /&gt;
     } else {&lt;br /&gt;
       oldVal += ( incr1 - 2 ) * 1000;&lt;br /&gt;
     }&lt;br /&gt;
     if( incr2 &amp;lt; 8 ){&lt;br /&gt;
       oldVal -= incr2 * 250;&lt;br /&gt;
     } else {&lt;br /&gt;
       oldVal += incr2 * 250;&lt;br /&gt;
     }&lt;br /&gt;
     return oldVal;&lt;br /&gt;
   }&lt;br /&gt;
   private void appendValue( String stock, int val ){&lt;br /&gt;
     buf.append( stock );&lt;br /&gt;
     buf.append( &amp;quot; &amp;quot; );&lt;br /&gt;
     buf.append( Integer.toString( val / 1000 ) );&lt;br /&gt;
     buf.append( &amp;quot;.&amp;quot; );&lt;br /&gt;
     buf.append( Integer.toString( val % 1000 ) );&lt;br /&gt;
     buf.append( &amp;quot; &amp;quot; );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TickerList ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
J2ME: The Complete Reference&lt;br /&gt;
James Keogh&lt;br /&gt;
Publisher: McGraw-Hill&lt;br /&gt;
ISBN 0072227109&lt;br /&gt;
*/&lt;br /&gt;
//jad file (please verify the jar size)&lt;br /&gt;
/*&lt;br /&gt;
MIDlet-Name: TickerList&lt;br /&gt;
MIDlet-Version: 1.0&lt;br /&gt;
MIDlet-Vendor: MyCompany&lt;br /&gt;
MIDlet-Jar-URL: TickerList.jar&lt;br /&gt;
MIDlet-1: TickerList, , TickerList&lt;br /&gt;
MicroEdition-Configuration: CLDC-1.0&lt;br /&gt;
MicroEdition-Profile: MIDP-1.0&lt;br /&gt;
MIDlet-JAR-SIZE: 100&lt;br /&gt;
*/&lt;br /&gt;
import javax.microedition.midlet.*;&lt;br /&gt;
import javax.microedition.lcdui.*;&lt;br /&gt;
public class TickerList extends MIDlet implements CommandListener&lt;br /&gt;
{&lt;br /&gt;
  private Display display; &lt;br /&gt;
  private List list; &lt;br /&gt;
  private final String tech;&lt;br /&gt;
  private final String entertain;&lt;br /&gt;
  private Ticker ticker; &lt;br /&gt;
  private Command exit; &lt;br /&gt;
  private Command submit;&lt;br /&gt;
  public TickerList()&lt;br /&gt;
  {&lt;br /&gt;
    display = Display.getDisplay(this);&lt;br /&gt;
    tech = new String (&amp;quot;IBM 55 MSFT 32 SUN 52 CISCO 87&amp;quot;);&lt;br /&gt;
    entertain = new String (&amp;quot;CBS 75 ABC 455 NBC 243 GE 21&amp;quot;);&lt;br /&gt;
    exit = new Command(&amp;quot;Exit&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
    submit = new Command(&amp;quot;Submit&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
    ticker = new Ticker(tech); &lt;br /&gt;
    list = new List(&amp;quot;Stock Ticker&amp;quot;, Choice.EXCLUSIVE);&lt;br /&gt;
    list.append(&amp;quot;Technology&amp;quot;, null);&lt;br /&gt;
    list.append(&amp;quot;Entertainment&amp;quot;, null);&lt;br /&gt;
    list.addCommand(exit);&lt;br /&gt;
    list.addCommand(submit);&lt;br /&gt;
    list.setCommandListener(this);&lt;br /&gt;
    list.setTicker(ticker);&lt;br /&gt;
  }&lt;br /&gt;
  public void startApp()&lt;br /&gt;
  {&lt;br /&gt;
    display.setCurrent(list);&lt;br /&gt;
  }&lt;br /&gt;
  public void pauseApp()&lt;br /&gt;
  { &lt;br /&gt;
  }&lt;br /&gt;
  public void destroyApp(boolean unconditional)&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
  public void commandAction(Command command, Displayable display)&lt;br /&gt;
  {&lt;br /&gt;
    if (command == exit)&lt;br /&gt;
    {&lt;br /&gt;
      destroyApp(true);&lt;br /&gt;
      notifyDestroyed();&lt;br /&gt;
    }&lt;br /&gt;
    else if (command == submit)&lt;br /&gt;
    {&lt;br /&gt;
      if (list.getSelectedIndex() == 0)&lt;br /&gt;
      {&lt;br /&gt;
         ticker.setString (tech);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        ticker.setString(entertain);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>