Using alerts and tickers in J2ME

By: Eric Giguere Viewed: 153250 times  Printer Friendly Format    


This is a simple stock tracking MIDlet that demonstrates the use of alerts and tickers. Note that the stock values are generated randomly for example purposes. In the real world, you would use the HttpConnection class to obtain stock values from a web site. Note particularly how the alert text can be changed while the alert is still active.

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;

public class StockWatcher extends MIDlet {

  Display      display;
  Ticker       ticker = new Ticker( "" );
  Command      exitCommand = new Command( 
                                             "Exit", Command.EXIT, 1 );
  Timer        timer = new Timer();
  StockChecker checker = new StockChecker();
  TickerForm   form = new TickerForm();
  Alert        alert = new Alert( "Stock Alert!" );

  public StockWatcher() {
    display = Display.getDisplay( this );
    alert.setTimeout( Alert.FOREVER );
  }

  protected void destroyApp( boolean unconditional ) { }

  protected void startApp() {
    display.setCurrent( form );
    timer.schedule( checker, 0, 30000 );
  }

  protected void pauseApp() { }

  public void exit(){
    timer.cancel();
    destroyApp( true );
    notifyDestroyed();
  }

  // Display a simple form to hold the ticker

  class TickerForm extends Form implements CommandListener {
    public TickerForm(){
      super( "Stock Watch" );
      setTicker( ticker );
      addCommand( exitCommand );
      setCommandListener( this );
    }

    public void commandAction( Command c, Displayable d ){
      exit();
    }
 }
                    
 // Check the stock values and put up an alert if
 // they're beyond certain limits....

 class StockChecker extends TimerTask {
   Random       generator = new Random();
   int          sybsValue = 20000;
   int          sunwValue = 30000;
   int          ibmValue = 40000;
   StringBuffer buf = new StringBuffer();

   public void run(){
     String values = getStockValues();

     ticker.setString( values );

     if( sybsValue < 18000 || sybsValue > 22000 ||
                sunwValue < 28000 || sunwValue > 32000 ||
                ibmValue < 38000 || ibmValue > 42000 ){
       alert.setString( values );
     }

     if( !alert.isShown() ){
       display.setCurrent( alert, form );
     }
   }

   private String getStockValues(){
     sybsValue = randomStockValue( sybsValue );
     sunwValue = randomStockValue( sunwValue );
     ibmValue = randomStockValue( ibmValue );

     buf.setLength( 0 );
     appendValue( "SYBS", sybsValue );
     appendValue( "SUNW", sunwValue );
     appendValue( "IBM", ibmValue );

     return buf.toString();
   }

   // Generate a random stock value... in the
   // real world you'd use HTTP to obtain the
   // stock value from a broker's website.

   private int randomStockValue( int oldVal ){
     int incr1 = ( generator.nextInt() % 2 );
     int incr2 = ( generator.nextInt() % 16 );

     if( incr1 < 1 ){
       oldVal -= incr1 * 1000;
     } else {
       oldVal += ( incr1 - 2 ) * 1000;
     }

     if( incr2 < 8 ){
       oldVal -= incr2 * 250;
     } else {
       oldVal += incr2 * 250;
     }

     return oldVal;
   }

   private void appendValue( String stock, int val ){
     buf.append( stock );
     buf.append( ' ' );
     buf.append( Integer.toString( val / 1000 ) );
     buf.append( '.' );
     buf.append( Integer.toString( val % 1000 ) );
     buf.append( ' ' );
   }
 }
} 


Most Viewed Articles (in J2ME )

Latest Articles (in J2ME)

Comment on this tutorial