Java Tutorial/J2ME/Thread
Create a new thread
<source lang="java">
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.rumand; import javax.microedition.lcdui.rumandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.StringItem; import javax.microedition.midlet.MIDlet; public class J2METhreadTest extends MIDlet implements CommandListener {
private Form form = new Form("Thread Test"); private StringItem text = new StringItem("Current Thread:", Thread.currentThread().getName()); private Display display; public J2METhreadTest() { form.append(text); form.addCommand(new Command("Exit", Command.EXIT, 1)); form.addCommand(new Command("New Thread", Command.SCREEN, 1)); form.setCommandListener(this); display = Display.getDisplay(this); } public void startApp() { display.setCurrent(form); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command cmd, Displayable disp) { if (cmd.getLabel().equals("Exit")) { notifyDestroyed(); } else { Thread runner = new Thread(new ThreadRunner(display)); runner.start(); } }
} class ThreadRunner implements Runnable {
Display display; ThreadRunner(Display display) { this.display = display; } public void run() { display.setCurrent(new Alert(Thread.currentThread().getName())); try { Thread.sleep(3000); } catch (Exception e) { } }
}</source>
Paint Canvas in a thread
<source lang="java">
import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.rumand; import javax.microedition.lcdui.rumandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Graphics; import javax.microedition.midlet.MIDlet; public class J2MESweep extends MIDlet {
public void startApp() { final SweepCanvas sweeper = new SweepCanvas(); sweeper.start(); sweeper.addCommand(new Command("Exit", Command.EXIT, 0)); sweeper.setCommandListener(new CommandListener() { public void commandAction(Command c, Displayable s) { sweeper.stop(); notifyDestroyed(); } }); Display.getDisplay(this).setCurrent(sweeper); } public void pauseApp() { } public void destroyApp(boolean unconditional) { }
} class SweepCanvas extends Canvas implements Runnable {
private boolean mTrucking; private int mTheta = 0; private int mBorder = 10; private int mDelay = 50; public void start() { mTrucking = true; Thread t = new Thread(this); t.start(); } public void stop() { mTrucking = false; } public void paint(Graphics g) { int width = getWidth(); int height = getHeight(); g.setGrayScale(255); g.fillRect(0, 0, width - 1, height - 1); int x = mBorder; int y = mBorder; int w = width - mBorder * 2; int h = height - mBorder * 2; for (int i = 0; i < 8; i++) { g.setGrayScale((8 - i) * 32 - 16); g.fillArc(x, y, w, h, mTheta + i * 10, 10); } } public void run() { while (mTrucking) { mTheta = (mTheta + 1) % 360; repaint(); try { Thread.sleep(mDelay); } catch (InterruptedException ie) { } } }
}</source>
Thread in J2ME
<source lang="java">
import java.io.IOException; import javax.microedition.lcdui.rumand; import javax.microedition.lcdui.rumandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.midlet.MIDlet; public class J2MEBackgroundProcessing extends MIDlet implements CommandListener {
private Display display; private Form form= new Form("Background Processing"); private Command exit = new Command("Exit", Command.EXIT, 1); private Command start = new Command("Start", Command.SCREEN, 2); public J2MEBackgroundProcessing() { display = Display.getDisplay(this); form.addCommand(exit); form.addCommand(start); form.setCommandListener(this); } public void startApp() { display.setCurrent(form); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command command, Displayable displayable) { if (command == exit) { destroyApp(false); notifyDestroyed(); } else if (command == start) { Process process = new Process(this); process.start(); } }
} class Process implements Runnable {
private BackgroundProcessing MIDlet; public Process(BackgroundProcessing MIDlet) { this.MIDlet = MIDlet; } public void run() { try { transmit(); } catch (Exception error) { System.err.println(error.toString()); } } public void start() { Thread thread = new Thread(this); try { thread.start(); } catch (Exception error) { } } private void transmit() throws IOException { }
}</source>