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