Wprowadzenie do J2ME Marcin Stachniuk mstachniuk@gmail.com Politechnika Wrocławska Wydział Elektroniki Studenckie Koło Naukowe Informatyki Systemów Autonomicznych i Adaptacyjnych ISA 2 25 listopada 2010 Marcin Stachniuk Wprowadzenie do J2ME 1/52
Plan prezentacji 1 Wprowadzenie 2 Pierwszy kod 3 Jakie środowisko? NetBeans Eclipse 4 Uruchomienie aplikacji 5 Podsumowanie Marcin Stachniuk Wprowadzenie do J2ME 2/52
Plan prezentacji 1 Wprowadzenie 2 Pierwszy kod 3 Jakie środowisko? NetBeans Eclipse 4 Uruchomienie aplikacji 5 Podsumowanie Marcin Stachniuk Wprowadzenie do J2ME 3/52
The Java Platform http://java.sun.com/javame/technology/index.jsp Marcin Stachniuk Wprowadzenie do J2ME 4/52
The Connected Limited Device Configuration http://java.sun.com/javame/technology/index.jsp Marcin Stachniuk Wprowadzenie do J2ME 5/52
CLDC 1.0 vs CLDC 1.1 CLDC 1.0 odchudzona java 1.3 pakiety: java.io, java.lang, java.util brak obsługi liczb zmiennoprzecinkowych CLDC 1.1 (JSR-139) obsługa liczb zmiennoprzecinkowych klasy Double i Float rozszerzona klasa Thread Marcin Stachniuk Wprowadzenie do J2ME 6/52
CLDC 1.0 vs CLDC 1.1 CLDC 1.0 odchudzona java 1.3 pakiety: java.io, java.lang, java.util brak obsługi liczb zmiennoprzecinkowych CLDC 1.1 (JSR-139) obsługa liczb zmiennoprzecinkowych klasy Double i Float rozszerzona klasa Thread Marcin Stachniuk Wprowadzenie do J2ME 6/52
Mobile Information Device Profile cz. 1 MIDP 1.0 http GUI RMS Record Management Store MIDP 2.0 https Mobile Media API (MMAPI) The Game API (Sprite, TiledLayer) Obrazy RGB Full Screen Mode Marcin Stachniuk Wprowadzenie do J2ME 7/52
Mobile Information Device Profile cz. 1 MIDP 1.0 http GUI RMS Record Management Store MIDP 2.0 https Mobile Media API (MMAPI) The Game API (Sprite, TiledLayer) Obrazy RGB Full Screen Mode Marcin Stachniuk Wprowadzenie do J2ME 7/52
Mobile Information Device Profile cz. 2 MIDP 2.1 poprawiona wersja 2.0 MIDP 3.0 LIBlety uruchamianie wielu midletów bezpieczeństwo Marcin Stachniuk Wprowadzenie do J2ME 8/52
Mobile Information Device Profile cz. 2 MIDP 2.1 poprawiona wersja 2.0 MIDP 3.0 LIBlety uruchamianie wielu midletów bezpieczeństwo Marcin Stachniuk Wprowadzenie do J2ME 8/52
Plan prezentacji 1 Wprowadzenie 2 Pierwszy kod 3 Jakie środowisko? NetBeans Eclipse 4 Uruchomienie aplikacji 5 Podsumowanie Marcin Stachniuk Wprowadzenie do J2ME 9/52
C++ Studenkie Koło Naukowe ISA 2 Warsztaty programistyczne J2ME 25 listopada 2010 Przykładowy program w C++: 1: #i n c l u d e <i o s t r e a m > 2: 3: u s i n g namespace s t d ; 4: 5: i n t main ( i n t argc, c h a r a r g v ) 6: { 7: cout << H e l l o World << e n d l ; 8: } Marcin Stachniuk Wprowadzenie do J2ME 10/52
Java SE Przykładowy program w Javie SE: 1: p u b l i c c l a s s Main { 2: p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3: System. out. p r i n t l n ( H e l l o World ) ; 4: } 5: } Marcin Stachniuk Wprowadzenie do J2ME 11/52
Java ME Przykładowy program w Javie ME: 1: // i m p o r t p a k i e t u z a w i e r a j ą c e g o k l a s ę MIDlet 2: i m p o r t j a v a x. m i c r o e d i t i o n. m i d l e t. ; 3: 4: // K l a s a r o z s z e r z a j ą c a a b s t r a k c y j n ą k l a s ę MIDlet. 5: // K l a s a k t ó r a b ę d z i e j a k o p i e r w s z a uruchamiana. 6: p u b l i c c l a s s MyMidlet e x t e n d s MIDlet { 7: p u b l i c v o i d s t a r t A p p ( ) { 8: } 9: 10: p u b l i c v o i d pauseapp ( ) { 11: } 12: 13: p u b l i c v o i d d e s t r o yapp ( b o o l e a n u n c o n d i t i o n a l ) { 14: } 15: } Marcin Stachniuk Wprowadzenie do J2ME 12/52
Cykl życia aplikacji http://developers.sun.com/mobility/midp/articles/fsm/ Marcin Stachniuk Wprowadzenie do J2ME 13/52
Znaczenie nadpisanych metod Klasa MIDlet: konstruktor - wywoływany tylko raz podczas uruchamiania aplikacji startapp() - wywoływana przy uruchomieniu aplikacji i podczas powrotu ze stanu Paused (np. po zakończeniu rozmowy telefonicznej) pauseapp() - wywoływana gdy telefon przechodzi w stan Paused (np. podczas przyjścia sms a) destroyapp(bool unconditional) - wywoływana przed zakończeniem aplikacji (np. podczas twardego wyłączania aplikacji czerwonym przyciskiem) Metody destroyapp() i startapp() mogą rzucić wyjątek MIDletStateChangeException, niezezwalając w ten sposób na zmianę stanu. Marcin Stachniuk Wprowadzenie do J2ME 14/52
Pierwszy MIDlet Listing 1: Pierwszty MIDlet 1: i m p o r t j a v a x. m i c r o e d i t i o n. l c d u i. ; 2: i m p o r t j a v a x. m i c r o e d i t i o n. m i d l e t. ; 3: 4: p u b l i c c l a s s M i d l e t e x t e n d s MIDlet { 5: p u b l i c v o i d s t a r t A p p ( ) { 6: // u t w o r z e n i e TextBox a 7: TextBox t ex tb ox = new TextBox ( 8: Moj P i e r w s z y M i d l e t, 9: H e l l o World!, 20, 0) ; 10: 11: // p o b r a n i e o b i e k t u w y ś w i e t l a c z a 12: D i s p l a y d i s p l a y = D i s p l a y. g e t D i s p l a y ( t h i s ) ; 13: 14: // u s t a w i e n i e w y ś w i e t l a n i a t e x t B o x a na e k r a n i e 15: d i s p l a y. s e t C u r r e n t ( t e xtbox ) ; 16: System. out. p r i n t l n ( H e l l o World! ) ; 17: } 18: Marcin Stachniuk Wprowadzenie do J2ME 15/52
Pierwszy MIDlet 19: p u b l i c v o i d pauseapp ( ) { 20: } 21: 22: p u b l i c v o i d d e s t r o yapp ( b o o l e a n u n c o n d i t i o n a l ) { 23: } 24: } Marcin Stachniuk Wprowadzenie do J2ME 16/52
Pierwszy MIDlet w działaniu Marcin Stachniuk Wprowadzenie do J2ME 17/52
Drugi MIDlet Listing 2: Drugi MIDlet 1: i m p o r t j a v a x. m i c r o e d i t i o n. l c d u i. ; 2: i m p o r t j a v a x. m i c r o e d i t i o n. m i d l e t. ; 3: 4: // k l a s a dodatkowo i m p l e m e n t u j e CommandListener 5: p u b l i c c l a s s M i d l e t e x t e n d s MIDlet implements CommandListener { 6: p u b l i c v o i d s t a r t A p p ( ) { 7: TextBox t ex tb ox = new TextBox ( 8: Moj P i e r w s z y M i d l e t, 9: H e l l o World!, 20, 0) ; 10: 11: // u t w o r z e n i e komendy Koniec 12: Command exitcommand = new Command( Koniec, Command. EXIT, 1) ; 13: // u s t a w i e n i e n a s ł u c h i w a c z a komend 14: t e x t B o x. setcommandlistener ( t h i s ) ; 15: // d o d a n i e komendy do t e x t B o x a 16: t e x t B o x. addcommand ( exitcommand ) ; Marcin Stachniuk Wprowadzenie do J2ME 18/52
Drugi MIDlet 17: D i s p l a y d i s p l a y = D i s p l a y. g e t D i s p l a y ( t h i s ) ; 18: d i s p l a y. s e t C u r r e n t ( t e x t B o x ) ; 19: System. out. p r i n t l n ( H e l l o World! ) ; 20: } 21: 22: p u b l i c v o i d pauseapp ( ) { } 23: 24: p u b l i c v o i d d estroyapp ( b o o l e a n u n c o n d i t i o n a l ) { 25: } 26: 27: // k o n i e c z n a j e s t i m p l e m e n t a c j a t e j metody gdy implementujemy CommandListener 28: p u b l i c v o i d commandaction (Command c, D i s p l a y a b l e d ) { 29: // s p r a w d z e n i e czy z d a r z e n i e p o c h o d z i od komendy typu Command. EXIT 30: i f ( c. getcommandtype ( ) == Command. EXIT ) { 31: destroyapp ( f a l s e ) ; 32: n o t i f y D e s t r o y e d ( ) ; // z a k o ń c z e n i e a p l i k a c j i 33: } 34: } 35: } Marcin Stachniuk Wprowadzenie do J2ME 19/52
Drugi MIDlet w działaniu Marcin Stachniuk Wprowadzenie do J2ME 20/52
Plan prezentacji 1 Wprowadzenie 2 Pierwszy kod 3 Jakie środowisko? NetBeans Eclipse 4 Uruchomienie aplikacji 5 Podsumowanie Marcin Stachniuk Wprowadzenie do J2ME 21/52
Integrated Development Environment - IDE Podstawowe środowisko: Java Platform Micro Edition Software Development Kit 3.0 Najpopularniejsze środowiska: NetBeans Eclipse IntelliJ IDEA Vi / Vim ;) Marcin Stachniuk Wprowadzenie do J2ME 22/52
NetBeans obecnie 6.9.1 Marcin Stachniuk Wprowadzenie do J2ME 23/52
NetBeans download Marcin Stachniuk Wprowadzenie do J2ME 24/52
NetBeans Nowy Projekt Warto wybrać te zawierające już Java ME. Nie trzeba będzie instalować SDK. Marcin Stachniuk Wprowadzenie do J2ME 25/52
NetBeans Nazwa Projektu Marcin Stachniuk Wprowadzenie do J2ME 26/52
NetBeans Wybranie Platformy Marcin Stachniuk Wprowadzenie do J2ME 27/52
NetBeans Finish Marcin Stachniuk Wprowadzenie do J2ME 28/52
NetBeans Utworzony Midlet Marcin Stachniuk Wprowadzenie do J2ME 29/52
NetBeans Uruchomienie MIDletu Marcin Stachniuk Wprowadzenie do J2ME 30/52
Eclipse Studenkie Koło Naukowe ISA 2 Warsztaty programistyczne J2ME 25 listopada 2010 Marcin Stachniuk Wprowadzenie do J2ME 31/52
Eclipse download Marcin Stachniuk Wprowadzenie do J2ME 32/52
Eclipse Nowy Projekt Marcin Stachniuk Wprowadzenie do J2ME 33/52
Eclipse Nazwa Projektu Marcin Stachniuk Wprowadzenie do J2ME 34/52
Eclipse Właściwości Projektu Marcin Stachniuk Wprowadzenie do J2ME 35/52
Eclipse Ustawienia Projektu Marcin Stachniuk Wprowadzenie do J2ME 36/52
Eclipse Dodanie Nowego Midletu Marcin Stachniuk Wprowadzenie do J2ME 37/52
Eclipse Nazwa Nowego Midletu Marcin Stachniuk Wprowadzenie do J2ME 38/52
Eclipse Tworzenie Midletu koniec Marcin Stachniuk Wprowadzenie do J2ME 39/52
Eclipse Utworzony Midlet Marcin Stachniuk Wprowadzenie do J2ME 40/52
Eclipse Uruchomienie Midletu Marcin Stachniuk Wprowadzenie do J2ME 41/52
Plan prezentacji 1 Wprowadzenie 2 Pierwszy kod 3 Jakie środowisko? NetBeans Eclipse 4 Uruchomienie aplikacji 5 Podsumowanie Marcin Stachniuk Wprowadzenie do J2ME 42/52
JAD i JAR Marcin Stachniuk Wprowadzenie do J2ME 43/52
Przykładowa Zawartość JAD MIDlet-1: Midlet,, Midlet MIDlet-Jar-Size: 1035 MIDlet-Jar-URL: MobileApplication1.jar MIDlet-Name: MobileApplication1 MIDlet-Vendor: Vendor MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.0 Marcin Stachniuk Wprowadzenie do J2ME 44/52
Zawartość JAR Marcin Stachniuk Wprowadzenie do J2ME 45/52
Zawartość Manifestu (plik MANIFEST.MF) z pliku JAR MIDlet-1: Midlet,, Midlet MIDlet-Jar-URL: MobileApplication1.jar MIDlet-Name: MobileApplication1 MIDlet-Vendor: Vendor MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.0 Brak atrybutu MIDlet-Jar-Size! Marcin Stachniuk Wprowadzenie do J2ME 46/52
Instalacja Aplikacji Instalacja Aplikacji j2me na telefonie z internetu: Ściągnięcie pliku JAD Sprawdzenie pliku JAD (wielkość MIDletu, wersje MIDP, CLDC) Ściągnięcie pliku JAR Sprawdzenie rozmiaru JAR a (czy zgodny z wpisem w pliku JAD) Porównanie wpisów w pliku JAD i MANIFEST.MF Instalacja Marcin Stachniuk Wprowadzenie do J2ME 47/52
Zawartość JAD - zmodyfikowana MIDlet-1: Midlet,, Midlet MIDlet-Jar-Size: 1035 MIDlet-Jar-URL: http://myserwer.com/mobileapplication1.jar MIDlet-Name: MobileApplication1 MIDlet-Vendor: Vendor MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.0 Marcin Stachniuk Wprowadzenie do J2ME 48/52
Plan prezentacji 1 Wprowadzenie 2 Pierwszy kod 3 Jakie środowisko? NetBeans Eclipse 4 Uruchomienie aplikacji 5 Podsumowanie Marcin Stachniuk Wprowadzenie do J2ME 49/52
Czego się dzisiaj nauczyliśmy? Konfiguracje CLDC 1.0 i 1.1 Profile MIDP 1.0 2.0 2.1 3.0 Budowa programu, cykl życia aplikacji Środowiska IDE Uruchomienie Aplikacji Marcin Stachniuk Wprowadzenie do J2ME 50/52
Pytania Studenkie Koło Naukowe ISA 2 Warsztaty programistyczne J2ME 25 listopada 2010? Marcin Stachniuk Wprowadzenie do J2ME 51/52
Więcej informacji Kontakt z autorem: mstachniuk@gmail.com Strona koła naukowego ISA 2 http://autonom.ict.pwr.wroc.pl/ Nowa (2010) strona warsztatów: http://autonom.iiar.pwr.wroc.pl/mobile/ Stara (2009) strona warsztatów: http://autonom.ict.pwr.wroc.pl/ mstachniuk Adres tego dokumentu: http://autonom.iiar.pwr.wroc.pl/mobile/2010/02/02-podstawy-2010.11.25.pdf NetBeans http://www.netbeans.org/ Eclipse http://www.eclipse.org/ Java ME Platform Overview http://java.sun.com/javame/technology/index.jsp Managing the MIDlet Life-Cycle with a Finite State Machine http://developers.sun.com/mobility/midp/articles/fsm/ Java Platform Micro Edition Software Development Kit 3.0 http://java.sun.com/javame/downloads/sdk30.jsp Marcin Stachniuk Wprowadzenie do J2ME 52/52