Java Tutorial/J2ME/Thread

Материал из Java эксперт
Перейти к: навигация, поиск

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>