Prerekwizyty. Aby pisać midlety należy zainstalować: JDK 1.2 lub nowszy, CLDC: cldc/download.

Podobne dokumenty
Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 1

Java Platform Micro Edition

STWORZENIE PRZYKŁADOWEJ

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 3

Wprowadzenie do J2ME

Laboratorium z informatyki sem. III/ćw.12 Wydział Transportu PW 2018/19

Programowanie aplikacji na urządzenia mobilne

public void startapp() { } public void pauseapp() { } public void destroyapp(boolean unconditional) { }

Laboratorium z informatyki sem. III/ćw.11 Wydział Transportu PW 2017/18

Programowanie w języku Java

ZAPOZNANIE SIĘ Z TWORZENIEM

M-biznes: Mobile Business. Realizacja aplikacji mobilnych w języku Java. Typy urządzeń przenośnych. Przykłady zastosowań

Java programowanie telefonów komórkowych Na podstawie:

Programowanie na komórki

J2ME Część II. P.J.Podsiadły

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

INSTRUKCJA DO ĆWICZENIA 13. Animacja wielowątkowa w aplikacjach JME. Gra logistyczna.

Programowanie urządzeń mobilnych na platformie Java ME

Autor : Mateusz Kupczyk

Programowanie obiektowe

SEMINARIUM DYPLOMOWE

Tworzenie i wykorzystanie usług

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Multimedia JAVA. Historia

J2ME. Java dla urz¹dzeñ mobilnych. Æwiczenia

I2: J2ME programowanie w NetBeans IDE Wydział Transportu PW semestr /11

Programowanie urządzeń mobilnych. dr inż. Tomasz Walkowiak

Piotr Orzechowski. Technologie Biznesu Elektronicznego

Agata Gałecka, Martyna Sikorska, Tomasz Cebula. 28 kwietnia 2009

Aplikacja wielowątkowa prosty komunikator

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie rozproszone w języku Java

Programowanie obiektowe

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

Aplikacje w Javie- wykład 11 Wątki-podstawy

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Podstawy otwartych języków programowania Język Java

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java. Programowanie Obiektowe Mateusz Cicheński

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Java jako język programowania

Aplikacja wielow tkowa prosty komunikator

Programowanie współbieżne Laboratorium nr 11

Aplikacje RMI

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Programowanie w języku Java

JAVA I SIECI. MATERIAŁY:

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wywoływanie metod zdalnych

Programowanie obiektowe zastosowanie języka Java SE

Aplikacje RMI Lab4

Java w Urządzeniach Mobilnych

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Remote Method Invocation 17 listopada 2010

Java: interfejsy i klasy wewnętrzne

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

1 Atrybuty i metody klasowe

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Programowanie w Javie cz. 1 Wstęp. Łódź, 24 luty 2014 r.

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

II Tworzenie klasy Prostokąt dziedziczącej z klasy wątku

Wykład 7: Pakiety i Interfejsy

Język Java wątki (streszczenie)

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Współbieżność w środowisku Java

Wywoływanie metod zdalnych

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Laboratorium Programowania Kart Elektronicznych

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Programowanie urządzeń mobilnych

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Dokumentacja do API Javy.

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

PROJEKTOWANIE ABSTRAKCYJNEJ KLASY FIGURA PRZECHOWUJĄCEJ WSPÓLNE CECHY OBIEKTÓW GRAFICZNYCH

JAVA?? to proste!! Autor: wojtekb111111

Programowanie obiektowe

package pakieta; import pakietb.b; package pakietb; public class B { B(){} public class A { private B b; A(B b) { this.b = b; } }

Klasy i obiekty cz II

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

TECHNOLOGIE INFORMACYJNE

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

WPROWADZENIE DO JĘZYKA JAVA

Wzorce logiki dziedziny

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Transkrypt:

Java ME 1. Wprowadzenie. 2. Prerekwizyty. 3. Pisanie midletów cykl życia, kompilacja, dystrybucja i uruchomienie. 4. Tworzenie interfejsów użytkownika. 5. Grafika 2D. 6. Korzystanie z sieci. 7. Narzędzia programistyczne. 1

Java ME Java ME jest zbiorem technologii oraz specyfikacji, które s ą implementowane przez środowiska JRE dostępne na urządzeniach przenośnych. Najważniejsze technologie wchodzące w skład JME dla telefonów komórkowych to: CLDC (Connected Limited Device Configuration) specyfikacja JSR- 30 (wersja 1.0) i JSR-139 (wersja 1.1) MIDP (Mobile Information Device Profile) specyfikacja JSR-37 (wersja 1.0) i JSR-118 (wersja 2.0) Ponadto istnieje wiele dodatkowych technologii implementowanych przez poszczególne urządzenia, np. JSR-82 Bluetooth, JSR-184 Java 3D, JSR-135 Mobile Media,... 2

Prerekwizyty Aby pisać midlety należy zainstalować: JDK 1.2 lub nowszy, CLDC: http://www.sun.com/software/communitysource/j2me/ MIDP http://java.sun.com/products/midp/index.jsp cldc/download.html 3

Pierwszy midlet import javax.microedition.lcdui.display; import javax.microedition.lcdui.form; import javax.microedition.midlet.midlet; import javax.microedition.midlet.midletstatechangeexception; public class HelloMidlet extends MIDlet { private Form form; public HelloMidlet() { this.form = new Form("HelloMidlet"); protected void destroyapp(boolean b) throws MIDletStateChangeException { protected void pauseapp() { protected void startapp() throws MIDletStateChangeException { Display d = Display.getDisplay(this); d.setcurrent(this.form); 4

Midlet cykl życia źródło: http://www.developer.com/java/j2me/article.php/10934_1561591_1 5

Kompilacja Do kompilacji midletu należy użyć polecenia javac: javac -d.\ -bootclasspath c:\pathto\midp\classes HelloMidlet.java Po kompilacji należy wykonać tzw. preweryfikacj ę, która przystosowuje klas ę do uruchomienia przez KVM: preverify -classpath c:\pathto\midp\classes; HelloMidlet Wynikowa klasa znajdzie si ę w podkatalogu output. Na zakończenie należy przygotować archiwum jar oraz deskryptor jad. 6

Dystrybucja oprogramowania Program JME składa si ę zwykle z dwóch plików: archiwum jar i deskryptora jad. Plik jad zawiera opis programu wraz z lokalizacj ą archiwum, które zawiera midlety. MIDlet-Jar-URL: mehello.jar MIDlet-1: HelloMidlet,,HelloMidlet MIDlet-Name: pierwszy zbior midletow MIDlet-Vendor: Jan Piotrowski MIDlet-Version: 0.0.1 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-1.0 7

Dystrybucja oprogramowania W przypadku, gdy posiadamy lokalnie archiwum z programem plik jad nie jest wymagany. W takiej sytuacji odpowiednie wpisy musz ą być dołączone do pliku META-INF/MANIFEST-MF: Manifest-Version: 1.0 MIDlet-1: HelloMidlet,,HelloMidlet MIDlet-Name: pierwszy zbior midletow MIDlet-Vendor: Jan Piotrowski MIDlet-Version: 0.0.1 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-1.0 Testowanie programu: midp -descriptor hello.jad 8

Uruchomienie programu Program instalujemy w telefonie zgodnie z instrukcj ą obsługi. Po uruchomieniu ukaże sie następujący ekran: 9

Obsługa menu Aby utworzyć menu trzeba stworzyć komendy javax.microedition.lcdui.command. Komendy dodaje si ę do obiektu implementującego javax.microedition.lcdui.displayable. Ponadto komponent zawierający komendy musi ustawić obiekt nasłuchujący javax.microedition.lcdui.commandlistener, który będzie zawierał kod wykonany przy wybraniu pozycji w menu (Command). 10

Obsługa menu public class CommandMidlet extends MIDlet implements CommandListener{ private Command exitcommand, infocommand, anycommand; private TextBox box; public CommandMidlet() { this.exitcommand = new Command("Exit", Command.SCREEN, 1); this.infocommand = new Command("Info", Command.SCREEN, 2); this.anycommand = new Command("Command", Command.SCREEN, 2); protected void startapp() { this.box = new TextBox("Command Midlet", "Witamy w midlecie", 256, 0); this.box.addcommand(this.exitcommand); this.box.addcommand(this.infocommand); this.box.addcommand(this.anycommand); this.box.setcommandlistener(this); Display.getDisplay(this).setCurrent(this.box); 11

Obsługa menu protected void destroyapp(boolean arg0) { protected void pauseapp() { public void commandaction(command c, Displayable d) { if (c == this.infocommand) { this.box.setstring("wybrano info"); return; if (c == this.anycommand) { this.box.setstring("wybrano command"); return; if (c == this.exitcommand) { this.notifydestroyed(); 12

Uruchomienie programu Sposób realizacji menu jest uzależniony od modelu telefonu. Zwykle dostępne s ą dwa lub trzy przyciski oraz kierunki umożliwiające wybór odpowiednich opcji. 13

Klasa Ticker Efekt: protected void startapp() { this.box = new TextBox("Ticker Midlet", "Witamy w kolejnym midlecie", 256, 0); this.box.addcommand(this.exitcommand); this.box.addcommand(this.infocommand); this.box.addcommand(this.anycommand); this.box.setcommandlistener(this); this.box.setticker(new Ticker("Java ME jest OK")); Display.getDisplay(this).setCurrent(this.box); 14

Formularze protected void startapp() { this.form = new Form("Formularz"); this.form.append(new TextField("Imie", "", 16, TextField.ANY)); this.form.append(new TextField("Nazwisko", "", 16, TextField.ANY)); this.form.append(new TextField("Wiek", "", 3, TextField.NUMERIC)); this.form.append(new TextField("tel.", "", 10, TextField.PHONENUMBER this.form.addcommand(this.exitcommand); this.form.setcommandlistener(this); Display.getDisplay(this).setCurrent(this.form); Wynik: 15

Grafika 2D klasa GameCanvas źródło: http://developers.sun.com/techtopics/mobility/midp/articles/game/ index.html public class SimpleCanvas extends GameCanvas implements Runnable{ private volatile boolean isrunning; private long delay; private int x, y; private int size; public SimpleCanvas() { super(true); x = getwidth() / 2; y = getheight() / 2; size = 0; delay = 20; public void start() { isrunning = true; Thread t = new Thread(this); t.start(); 16

Grafika 2D klasa GameCanvas public void stop() { isrunning = false; public void run() { Graphics g = getgraphics(); while (isrunning == true) { tick(); input(); render(g); try { Thread.sleep(delay); catch (InterruptedException ie) { stop(); private void tick() { size = (size + 1) % 20; 17

Grafika 2D klasa GameCanvas private void input() { int keystates = getkeystates(); if ((keystates & LEFT_PRESSED)!=0) x=math.max(0, x-1); if ((keystates & RIGHT_PRESSED)!= 0)x=Math.min(getWidth(),x+1); if ((keystates & UP_PRESSED)!= 0) y=math.max(0, y-1); if ((keystates & DOWN_PRESSED)!= 0)y=Math.min(getHeight(), y+1); private void render(graphics g) { g.setcolor(0xffffff); g.fillrect(0, 0, getwidth(), getheight()); g.setcolor(0x0000ff); g.drawline(x, y, x - 10 + size, y - 10); g.drawline(x, y, x + 10, y - 10 + size); g.drawline(x, y, x + 10 - size, y + 10); g.drawline(x, y, x - 10, y + 10 - size); flushgraphics(); 18

Grafika 2D Midlet public class GameMidlet extends MIDlet implements CommandListener { private Display display; private SimpleCanvas canvas;... public void startapp() { if (canvas == null) { canvas = new SimpleCanvas(); canvas.start(); display = Display.getDisplay(this); display.setcurrent(canvas); public void destroyapp(boolean unconditional) { canvas.stop();... 19

Hierarchia lcdgui java.lang.object Displayable Command Graphics Item Ticker Canvas Screen Gauge ChoiceGroup Alert Form List TextBox Stringtem DateField TextField ImageItem Klasa konkretna Klasa abstrakcyjna 20

Programowanie sieciowe CLDC 1.0 MIDP 1.0 MIDP 2.0 21

Programowanie sieciowe Nawiązanie połączenia odbywa si ę za pomoc ą klasy javax.microedition.io.connector: try { Connection con = Connector.open("protocol:address;parameters"); catch (ConnectionNotFoundExeption e) { // brak sterownika dla protokołu Kilka przykładów url'i: HTTP: Connector.open("http://java.sun.com/wireless"); gniazdo: Connector.open("socket://java.sun.com:port"); datagram: Connector.open("datagram://java.sun.com:port"); 22

Programowanie sieciowe public class TimeMidlet extends MIDlet implements CommandListener{ private TimeClient client; private Command cexit = new Command("Exit", Command.EXIT, 1); private Command cstart = new Command("GetTime", Command.ITEM, 1); public TimeMidlet() { Form f = new Form("Time Demo"); f.append(new StringItem("Wybierz GetTime...", " ")); f.addcommand(cexit); f.addcommand(cstart); f.setcommandlistener(this); Display.getDisplay(this).setCurrent(f); public void commandaction(command c, Displayable s) { if (c == cexit) notifydestroyed(); else if (c == cstart) { Thread t = new Thread(new TimeClient(this)); t.start();... 23

Programowanie sieciowe public class TimeClient implements Runnable { private TimeMidlet parent; private StringItem stime; public TimeClient(TimeMidlet m) { parent = m; Form f = new Form("Time Client"); stime = new StringItem("Time:", " "); f.append(stime); Display.getDisplay(parent).setCurrent(f); public void commandaction(command c, Displayable s) { if (c == Alert.DISMISS_COMMAND) { parent.notifydestroyed(); parent.destroyapp(true); 24

Programowanie sieciowe public void run() { SocketConnection sc = null; InputStream is = null; try { sc = (SocketConnection) Connector.open("socket://theta.uoks.uj.edu.pl:13"); is = sc.openinputstream(); StringBuffer sb = new StringBuffer(); int c = 0; while (((c = is.read())!= '\n') && (c!= -1)) sb.append((char) c); stime.settext(sb.tostring()); catch(ioexception e) { Alert a = new Alert("Time", "Błąd", null, AlertType.ERROR); a.settimeout(alert.forever); Display.getDisplay(parent).setCurrent(a); finally { try { if(is!= null) is.close(); if(sc!= null) sc.close(); catch(ioexception e) { e.printstacktrace(); 25

Narzędzia programistyczne 1. Eclipse plugin: Eclpseme - http://www.eclipseme.org/ pakiet CLDC/MIDP np: Sun Java Wireless Toolkit (http://java.sun.com/javame/downloads/index.jsp) lub ze stron producenta telefonu 2. Netbeans plugin do Netbeans: Netbeans Mobility Pack - http://www.netbeans.org/products/mobility/ 3. Inne narzędzia kompresor kodu (obfuscator) - http://proguard.sourceforge.net/ 26

Podsumowanie Specyfikacja JME składa si ę z wielu różnorodnych API implementowanych przez poszczególne urządzenia mobilne. Jest to szczególnie istotne w przypadku pisaniu kodu, który ma działać na wielu różnych modelach urządze ń. Ze wględu na szybki rozwój technologii i postępując ą miniaturyzacj ę telefony komórkowe potrafi ą obsługiwać coraz bardziej skomplikowane aplikacje napisane w Javie. Niemniej trzeba pamiętać, że urządzenia mobilne nadal wymagaj ą specjalnego sposobu kompilacji i dystrybucji oprogramowania (midletów). 27