Programming Tutorials

Using alerts and tickers in J2ME

By: Eric Giguere in J2ME Tutorials on 2008-07-10  

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( ' ' );
   }
 }
} 





Add Comment

* Required information
1000

Comments

No comments yet. Be the first!

Most Viewed Articles (in J2ME )

Latest Articles (in J2ME)