midlet 프로그램 구조 및 생명 주기
DESCRIPTION
MIDlet 프로그램 구조 및 생명 주기. Lecture #3. 강의 목차. J2ME 플랫폼 개요 MIDlet 프로그램의 기본 구조를 익힌다 . MIDP 2.0 패키지의 종류를 알아본다 . 문자열을 출력하는 간단한 MIDlet 프로그램을 작성한다 . 문자열 출력을 응용해 게임 방법을 설명하는 화면을 만들어 본다. J2ME(Java 2 Micro Edition) 플랫폼. “One size doesn't fit all”. “WORA (Write Once Run Anywhere.)”. - PowerPoint PPT PresentationTRANSCRIPT
MIDletMIDlet 프로그램 구조 및 프로그램 구조 및 생명 주기생명 주기
Lecture #3Lecture #3
강의 목차강의 목차
▶ J2ME 플랫폼 개요▶ MIDlet 프로그램의 기본 구조를 익힌다 .▶ MIDP 2.0 패키지의 종류를 알아본다 .▶ 문자열을 출력하는 간단한 MIDlet 프로그램을 작성한다 .▶ 문자열 출력을 응용해 게임 방법을 설명하는 화면을 만들어
본다 .
2Mobile Programming
J2ME(Java 2 Micro Edition) J2ME(Java 2 Micro Edition) 플랫폼플랫폼
3
“One size doesn't fit all” “WORA (Write Once Run Anywhere.)”
Mobile Programming
J2ME(Java 2 Micro Edition) J2ME(Java 2 Micro Edition) 플랫폼플랫폼
4
Embedded Java
- Personal Java 보다 협소적 환경의 spec.
“WORA (Write Once Run Anywhere)”
Personal Java
- 소형기기에 적합한 spec.
- J2ME CDC 의 모태
한계를 극복하기 위한 방안
- J2ME 에서는 각 디바이스와 운영환경에 맞게 플랫폼을 분할
( 플랫폼 분할을 위해 configuration 과 profile 개념 도입 )
Mobile Programming
Configuration and Profile (1)Configuration and Profile (1)
▶ Configuration and Profile : ▷ J2ME 의 핵심적 요소 ▷ 플랫폼의 통일성과 다양성을 만족 시킴▷ VM 과 클래스 라이브러리를 특정한 장치 그룹에 최적화하는 것 ▷ 현재 CLDC 와 CDC Configuration 으로 정의
5
CLDC 디바이스 군 :
- 16 비트 또는 32 비트 CPU- 160KB~512KB 크기의 메모리 (RAM 과 ROM 포함 )- 제한된 전력 또는 배터리 파워 공급 낮은 네트웍 전송률 등의 기기 사양- 핸드폰 , 양방향 삐삐 , 또는 PDA 등과 같은 기기
CDC 디바이스 군
- 32 비트 CPU- 2MB 이상의 메모리 (RAM 과 ROM 포함 )- 낮은 네트웍 전송률 (9600 bps 보다 낮을 수 있음 )- PDA, 가전 기기 , 자바폰 , 디지털 셋톱 (Set-top) 박스 등과 같은 기기
Mobile Programming
Configuration and Profile (2)Configuration and Profile (2)
▶ J2ME 컨피규레이션과 프로파일 및 임베디드 자바 기술
6
CLDC (Connected Limited Device Configuration) and KVM (K Virtual Machine)
http://java.sun.com/products/cldc/
CLDC 는 128K 에서 512K 크기의 메모리를 갖는 핸드폰과 같은 손으로 들고 다닐 수 있는(hand-held) 기기를 지원하기 위한 컨피규레이션이다 .
CDC (Connected Device Configuration) and CVM (C Virtual Machine)
http://java.sun.com/products/cdc/
CDC 는 2MB 또는 그 이상의 메모리를 갖는 차세대 기기를 지원하기 위한 API 를 정의하고 있는 컨피규레이션이다 .
MIDP (Mobile Information Device Profile)
http://java.sun.com/products/midp/
MIDP 는 CLDC 와 함께 셀룰라 폰 ( 핸드폰 ) 및 양방향 페이저와 같은 기기들을 위한 완전한 애플리케이션 환경을 제공해 준다 .
Foundation Profile
http://java.sun.com/products/foundation/
CDC 와 함께 차세대 소비 기기를 위한 완전한 애플리케이션 환경을 제공한다 .
Mobile Programming
Configuration and Profile (3)Configuration and Profile (3)
7
Java TVTM Technology
http://java.sun.com/products/javatv/
인터랙티브 디지털 TV 를 위한 개발 및 배포 환경을 제공한다 .
Java Embedded ServerTM Software
http://www.sun.com/software/embeddedserver/
임베디드 가전 기기들이 서로 네트워크로 연결되고 인터넷에 연결될 수 있도록 하고 , on-demand 서비스를 받을 수 있도록 한다 .
Java CardTM Technology
http://java.sun.com/products/javacard/
자바 프로그램이 스마트 카드와 다른 작은 기기에서 실행될 수 있도록 해 준다 .
PersonalJavaTM Application Environment
http://java.sun.com/products/personaljava/
PDA 와 같은 집 , 회사 , 모바일 기기들을 위한 애플리케이션을 개발할 수 있도록 해 주는 자바 가상 머신과 클래스 라이브러리이다 .
J2METM Wireless Toolkit
http://java.sun.com/products/j2mewtoolkit/
모바일 인포메이션 기기에 맞게 개발되는 MIDP 호환 애플리케이션을 위한 개발 툴이다 .
Mobile Programming
Configuration and Profile (4)Configuration and Profile (4)
▶ Configuration : ▷ java.io▷ java.net▷ java.util▷ java.lang▷ Configuration 이 포함하고 있는 명세 :
자바언어에 대한 명세 : 부동소수점 지원 여부 등 가상 머신에 대한 명세 : KVM, pJava, eJava Core API 에 대한 명세 : java.* 패키지
▶ Profile : ▷ 특정 device 및 산업군에 맞는 API 에 대한 명세▷ 이식성 (Portability) 을 지원
8Mobile Programming
CLDC/MIDP CLDC/MIDP 구조구조
9Mobile Programming
CLDC (1)CLDC (1)
▶ KVM (Kilobyte or Kauai Virtual Machine)▷ NTT 도코모와 3Com 에서 탑재▷ kilobyte 단위로 디자인▷ 메모리 풋프린트는 50KB, 클래스 라이브러리 포함 128KB
10Mobile Programming
CLDC (2)CLDC (2)
▶ CLDC(Connected Limited Device Configuration) 명세서 ▷ 자바 언어 및 가상 머신의 특징▷ 코어 자바 라이브러리 (java.* 로 시작하는 패키지들 )▷ 네트워킹과 입출력▷ 보안과 국제화
▶ CLDC 디바이스 목표 ▷ 128-512K 의 메모리 여유 공간▷ 16-32 비트 프로세서▷ 저전력 소모 , 주로 배터리 사용▷ 제한된 대역폭 (9600 bps 이하 ) 의 네트워크 연결성
11Mobile Programming
CLDC (3)CLDC (3)
▶ CLDC 의 특징▷ 부동 소수점을 지원 안 함 .▷ 마무리 (finalization) 을 지원 안 함 .▷ 에러 처리가 제한적이다 .▷ JNI(Java Native Interface) 를 지원 안 함 .▷ 리플렉션을 지원 안 함 . ▷ 쓰레드 그룹과 데몬 쓰레드를 지원 안 함 .▷ 사용자 정의 클래스 로더를 생성할 수 없다 .▷ 약한 참조 (weak reference) 를 지원 안 함 .▷ 클래스 파일 포맷이 다르고 , 클래스 룩업 , 클래스 로딩과 링킹
방법이 다름 ▷ 모래상자 보안 모델을 사용한다 . ▷ 전혀 다른 네트워킹 및 입출력 모델을 가지고 있다 .▷ 새로운 어플리케이션 모델을 가정하고 있다 .
12Mobile Programming
CLDC (4)CLDC (4)
▶ 클래스 파일 검증 과정
13Mobile Programming
CLDC (5)CLDC (5)
▶ GCF (Generic Connection Framework)
14
인터페이스 이름 설 명
ConnectionGeneric Connection Framework 에서 가장 기본이 되는 최상위 인터페이스
InputConnection 데이터를 읽어들일 수 있는 디바이스를 표현하는 연결형
OutputConnection 데이터를 전송할 수 있는 디바이스를 표현하는 연결형
StreamConnection단순히 InputConnection 과 OutputConnection 을 통합하기 위한 인터페이스 . 커뮤니케이션 인터페이스를 실제로 구현하는 클래스를 위한 논리적인 출발점을 제공
ContentConnectionHTTP 연결에 의한 기본적인 메타 데이터 정보에 대한 접근을 제공하는 StreamConnection 의 하위 인터페이스
StreamConnectionNotifier
연결이 설정될 때까지 기다리기 위해 사용되는 연결형 . acceptAndOpen( ) 메소드는 클라이언트 프로그램이 연결될 때까지 블록되고 , 연결이 설정되면 StreamConnection 을 리턴 .
DatagramConnection
데이터그램 종단을 표현하기 위한 연결형 .
Mobile Programming
CLDC (6)CLDC (6)
▶ CLDC API
15
java.lang 패키지 java.util 패키지 java.io 패키지
• 시스템 클래스java.lang.Objectjava.lang.Classjava.lang.Runtimejava.lang.Systemjava.lang.Threadjava.lang.Runnable java.lang.Stringjava.lang.StringBufferjava.lang.Throwable• 데이터 타입 클래스java.lang.Booleanjava.lang.Bytejava.lang.Shortjava.lang.Integerjava.lang.Longjava.lang.Character수학 클래스java.lang.Math
• 컬렉션 클래스java.util.Vectorjava.util.Stackjava.util.Hashtablejava.util.Enumeration • 날짜관련 클래스java.util.Calendarjava.util.Datejava.util.TimeZone• 유틸리티 클래스java.util.Random
• 입출력 클래스java.io.InputStreamjava.io.OutputStreamjava.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.DataInput java.io.DataOutput java.io.DataInputStreamjava.io.DataOutputStreamjava.io.Readerjava.io.Writerjava.io.InputStreamReaderjava.io.OutputStreamWriterjava.io.PrintStream
Mobile Programming
MIDPMIDP (Mobile Information Device Profile) (Mobile Information Device Profile) (1)(1)
▶ MIDP 명세서 정의▷ 어플리케이션 모델▷ 유저 인터페이스와 이벤트 핸들링▷ 영속적 저장공간▷ 네트워킹 , 타이머 지원▷ 디스플레이 요구사항
96x54 이상의 스크린 사이즈 1비트 이상의 디스플레이 ( 모노크롬 ) 종횡비 (aspect ratio) 가 약 1:1 에 근접
▷ 입출력 요구사항 한 손 , 혹은 두 손으로 입력가능한 입출력 메커니즘
▷ 메모리 요구사항 MIDP 컴포넌트를 위한 128K 의 비휘발성 메모리 공간 애플리케이션이 생성하는 데이터의 저장을 위한 8K 의 비휘발성 메모리 공간 자바 런타임을 위한 32K 의 휘발성 메모리 공간
▷ 네트워킹 요구사항 양방향이고 , 무선이며 , 제한된 대역폭에 , 간헐적으로 연결될 수 있음
16Mobile Programming
MIDP (2)MIDP (2)
▶ MIDP NG (Next Generation)▷ MIDP 1.0 과의 백워드 호환성▷ 작고 , 대용량인 무선 핸드폰▷ 코아 API 가 많아지는 것을 막기 위한 긴밀한 풋프린트 유지▷ MIDP 1.0 API 를 튜닝하기 위해 MIDP 배치시에 얻은 많은 정보▷ 모든 디바이스와 어플리케이션에 필요한 코아 기능 ▷ mCommerce, 서비스 기반 어플리케이션을 가능
▶ MIDP NG 는 차세대 MIDP 로서 현재 JCP 에 의해 JSR 118번으로 개발되고 있음 ▷ 관련 사이트 : http://jcp.org/jsr/detail/118.jsp
17Mobile Programming
JAMJAM 과 신개념 어플리케이션 모델과 신개념 어플리케이션 모델 (1)(1)
▶ JAM (Java Application Manager)▷ MIDlet 은 자바 애플릿과 유사한 방식으로 실행▷ MIDlet 을 다운로드하여 설치 , 업그레이드 , 실행 , 삭제하는 역할
▶ JAM 의 기본 기능
18
기 능 설 명
추출 (retrieval) 웹 사이트 등의 소스로부터 MIDlet 을 추출하는 기능
인스톨 (installation) 추출한 MIDlet 을 디바이스에 설치하는 기능
실행 (launching) MIDlet 을 호출하는 기능
버전 관리 설치된 MIDlet 을 새로운 버전으로 업그레이드 하는 기능
삭제 (removal) 설치된 프로그램을 삭제하는 기능
Mobile Programming
JAMJAM 과 신개념 어플리케이션 모델 과 신개념 어플리케이션 모델 (2)(2)
19
JAM 을 통한 어플리케이션 설치 과정 :
Mobile Programming
MIDletMIDlet 과 과 JAR JAR 파일파일
▶ MIDlet 은 JAR 파일 형태로 배포▶ JAR 파일에는 MIDlet 슈트의 패키지가 들어갈 수 있음
▷ JAR 컨텐츠에 대한 설명을 담고 있는 매니페스트 (manifest)▷ MIDlet 클래스를 상속한 클래스들과 다른 공유 클래스들▷ MIDlet 이 사용하는 리소드 파일들 ( 예를 들면 아이콘 , 이미지 등 )
▶ 매니페스트에서 필수적으로 들어가야 하는 속성 (Attributes)▷ MIDlet-Name
▷ MIDlet-Version▷ MIDlet-Vendor▷ MIDlet-<n>▷ MicroEdition-Configuration▷ MicroEdition-Profile
▶ MIDlet 은 javax.microedition.midlet.MIDlet 클래스를 반드시 상속해야 함 .
Mobile Programming 20
MIDlet AttributesMIDlet Attributes
21
애트리뷰트 이름 설 명
MIDlet-Name MIDlet 슈트의 이름
MIDlet-VersionMIDlet 슈트의 버전 번호 . major.minor.micro 의 형태로 정의되며 , JAM 이 설치 및 업그레이드를 위한 정보로 활용
MIDlet-Vendor MIDlet 슈트의 제공자
MIDlet-Description MIDlet 슈트에 대한 설명
MIDlet-Info-URL MIDlet suite 에 대한 자세한 설명을 포함한 URL
MIDlet-<n>JAR 파일안에 포함된 MIDlet 의 표시이름 , 아이콘 , 클래스명 . 하나의 JAR 파일에 여러 개의 MIDlet 이 포함되어 있을 경우 , 번호로 식별하게 되며 , <n>은 최소값이 1이고 , 반드시 순차적인 숫자를 사용하여야 한다 .
MIDlet-Jar-URL JAR 파일이 로딩될 URL
MIDlet-Jar-Size JAR 파일의 크기 ( 바이트 단위 )
MIDlet-Data-SizeMIDlet 이 필요로 하는 영속적 데이터의 크기 ( 바이트 단위 ). 디바이스에서는 이에 따라 추가적인 스토리지를 제공해야 하고 , 디폴트는 0이다 .
MicroEdition-Configuration
시스템 프로퍼티의 microedition.configuration 값과 동일한 J2ME 컨피규레이션 ( 예를 들어 , “CLDC-1.0”)
MicroEdition-Profile시스템 프로퍼티의 microedition.profiles 값과 동일한 J2ME 프로파일 ( 예를 들어 , “MIDP-1.0”)
Mobile Programming
어플리케이션 디스크립터어플리케이션 디스크립터 (JAD)(JAD)
▶ MIDlet 애트리뷰트를 효율적으로 전송 .▶ MIME type : text/sun.j2me.app-descriptor▶ 어플리케이션 디스크립터에 포함 되어야 할 필수적인
애트리뷰트▷ MIDlet-Name▷ MIDlet-Version▷ MIDlet-Vendor▷ MIDlet-Jar-URL▷ MIDlet-Jar-Size▷ MicroEdition-Profile▷ MicroEdition-Configuration
22Mobile Programming
MIDlet MIDlet 프로그램의 생명주기 프로그램의 생명주기 (1)(1)
▶ MIDlet 프로그램의 생명주기
23Mobile Programming
정지
실행
종료
MIDlet MIDlet 프로그램의 생명주기 프로그램의 생명주기 (2)(2)
▶ 정지▷ MIDlet 프로그램이 초기화되거나 일시정지 (Paused) 된 상태로 공유
리소스를 점유하지 않는다 . ▷ MIDlet 을 처음 실행하면 응용 프로그램 관리자는 일시정지 상태로
들어간다 . 그런 뒤 자원 할당이 가능하면 startApp() 를 호출하여 실행 상태로 바꾼다 .
▶ 실행▷ MIDlet 프로그램이 실행 (Active) 되는 상태다 . ▷ 응용 프로그램 관리자가 startApp() 메소드를 요청하거나 미들렛이
esumeRequest() 를 응용 프로그램 관리자에게 요청해서 startApp() 가 호출될 때 실행 상태로 들어간다 .
▶ 종료▷ MIDlet 프로그램이 종료 (Destroyed) 되는 상태로 , 공유 리소스를
해제한다 . ▷ 일시정지나 실행 상태에서 destroyApp() 를 호출하면 , 응용 프로그램 관리자는 종료 상태로 들어가서 프로그램을 종료한다 .
24Mobile Programming
MIDlet MIDlet 프로그램의 생명주기 프로그램의 생명주기 (3)(3)
25
startApp() : - 필요한 리소스에 대한 점유 획득 . Active 상태로 전이
pauseApp() : - 임시적인 리소스들에 대한 점유 해제 . Pause 상태로 전이
destroyApp() : - MIDlet 이 종료한 상태 . 공유 리소스를 해제한다 . - Destoryed 상태로 전이
MIDlet 의 상태 다이어 그램
Mobile Programming
네트워킹네트워킹
▶ MIDP 1.0 명세서는 HTTP 1.1 프로토콜의 서브셋을 지원 .
▶ MIDP 는 javax.microedition.io.HttpConnection 을 통해 HTTP 연결을 지원 .
Mobile Programming 26
레코드 관리 시스템레코드 관리 시스템 (RMS) (RMS)
▶ 데이터를 영속적으로 저장하고 사용하기 위해 RMS (Record Management System) 메커니즘을 제공 .
▶ 레코드 기반의 초소형 데이터베이스 .▶ Javax.microedition.rms 패키지를 통해 제공 .
Mobile Programming 27
클래스 및 인터페이스 설 명
RecordStore 바이트 배열로 이루어진 레코드들을 여러 개 가지고 있는 레코드스토어에 대한 구현 클래스
RecordComparator 두 개의 레코드를 비교하기 위한 Comparator 인터페이스
RecordEnumeration 레코드를 탐색하기 위한 Enumeration 인터페이스
RecordFilter 어떤 레코드가 조건을 만족하는 지 검사하기 위한 필터 인터페이스
RecordListener 레코드에 대한 추가 /변경 /삭제 이벤트를 감지하기 위한 리스너 인터페이스
타이머 지원 타이머 지원
▶ 일정한 시간 동안 지정해서 한번만 실행하거나 일정한 간격으로 여러 번 반복적으로 실행하도록 스케쥴링 할 수 있다 .
▶ Java.util.Timer▶ Java.util.TimerTask
28Mobile Programming
유저 인터페이스 유저 인터페이스 (1)(1)
▶ MIDP 유저 인터페이스 설계 원칙1. 한 손으로 입력 가능해야 한다 .2. 작은 스크린 사이즈에 적용 가능해야 한다 .3. 포인팅 디바이스가 없는 단말기에 적용 가능해야 한다 .4. 기존의 입출력 방법과 통합되어야 한다
▶ MIDP 에서 정의하는 두 가지 레벨의 API1. 상위 레벨 API: 비즈니스 어플리케이션과 같은 , 높은 수준의
이식성 (Portability) 를 요구하는 어플리케이션의 제작에 사용될 API
2. 하위 레벨 API: 게임 어플리케이션과 같은 , 특정한 목적에 맞게 사용이 가능한 어플리케이션의 제작에 사용될 API
29Mobile Programming
유저 인터페이스 유저 인터페이스 (2)(2)
30
핵심적인 유저 인터페이스 API 의 클래스 계층도 :
Mobile Programming
유저 인터페이스 유저 인터페이스 (3)(3)
▶ 두 가지 디스플레이 가능 클래스 :▷ Canvas 클래스 :
Canvas 클래스는 게임과 같은 하위 레벨 API 를 사용하는 어플리케이션을 위한 스크린을 제공한다 .
▷ Screen 클래스 : 텍스트 박스 , 리스트 , 등의 상위 레벨 API 를 위한 최상위 추상화를
제공 Screen 클래스를 상속하는 List, TextBox, Alert 와 같은 클래스들은
사전에 정의된 구조를 사용할 수 있는 컴포넌트들 사전에 정의된 구조를 사용할 수 없는 TextField, ImageItem, Gauge
등의 클래스들은 Screen 클래스를 상속하는 Form 클래스를 상속하도록 설계되어 있다
31Mobile Programming
CLDC/MIDP CLDC/MIDP 아키텍처아키텍처
32Mobile Programming
CLDC/MIDP CLDC/MIDP 표준 패키지표준 패키지
33
패키지 이름 설 명
java.io 데이터 스트림을 통한 스트림 입출력 제공
java.lang 자바언어에 관련된 본질적인 클래스 제공
java.util 가장 기본적인 유틸리티 클래스 제공 ( 타이머 포함 )
javax.microedition.io CLDC 의 GCF(Generic Connection Framework) 와 확장된 네트워킹 API 제공
javax.microedition.rms
MIDlet 이 핸드폰의 영속성 저장장치에 데이터를 저장하고 추출할 수 있는 API 제공
javax.microedition.midlet
MIDlet 에 대한 정의와 MIDlet 과 애플리케이션 관리 소프트웨어와의 상호작용에 대해 정의
javax.microedition.lcdui
모바일 인포메이션 디바이스 (MID) 를 위해 최적화된 사용자 인터페이스 API
Mobile Programming
MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (1)(1)
▶ 텍스트 기반 미들렛 프로그램▷ 화면 출력 제한적이다 .▷ 표현이 자유롭지 못하다 .▷ MIDlet 클래스를 상속한다 .
▶ 그래픽 기반 미들렛 프로그램▷ 표현이 자유롭다 . ▷ MIDlet 클래스 , Canvas 클래스
상속한다
34Mobile Programming
텍스트 기반 그래픽 기반
MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (2)(2)
▶ 텍스트 기반 MIDlet 프로그램 구조
35Mobile Programming
import javax.microedition.MIDlet.*; // import ① 문import javax.microedition.lcdui.*;
public class 클래스명 MIDlet extends MIDlet { // ② 클래스선언 display display; public 클래스명 MIDlet() { // ③ 생성자
display = Display.getDisplay(this); } public void startApp() { // ④ 실행 상태
...display.setCurrent(Displable nextDisplable);
} public void pauseApp() { // ⑤ 정지 상태 ... } public void destroyApp(boolean unconditional) {
// ⑥ 종료 상태...
}}
MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (3)(3)
▶ import 문▷ MIDP 라이브러리로 제공하는 패키지에는 포함된 클래스를
사용하려면 소스 코드 맨 앞에 import 문으로 선언해야 한다 .
36Mobile Programming
MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (4)(4)
▶ 클래스 선언▷ 클래스를 선언할 때는 MIDlet 클래스를 반드시 상속받아야 한다 .
▷ MIDlet 클래스에 정의된 응용 프로그램 관리자가 미들렛 프로그램을 생성하고 상태 변화를 관리한다 .
▷ 응용 프로그램 관리자는 미들렛의 상태 변화에 따라 적절한 메소드를 호출하여 상태 변경을 알려 줌으로써 미들렛 프로그램을 실행 , 일시정지 , 완전 종료시킬 수 있다 .
▶ 생성자▷ 클래스를 객체로 생성할 때 처음 한번만 실행되는 메소드로 , 꼭 필요하지는 않다 .
▷ 멤버 변수나 객체를 초기화하는 데 주로 이용된다 .
▷ 반환형이 없으며 , 클래스 이름과 동일해야 한다 .37Mobile Programming
MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (5)(5)
▶ 실행 상태▷ 미들렛이 실행되는 상태다 . ▷ 미들렛을 정지 상태에서 실행 상태로 이동할 때 startApp() 를
호출한다 .▷ 정지 상태에 있을 때만 호출된다 .
▶ 정지 상태▷ 공유 자원을 해제해 주어야 한다 .▷ 미들렛을 처음 실행하면 정지 상태 , 자원 할당이 가능하면
startApp() 를 호출하여 실행 상태로 이동한다 . ▷ 실행 상태에서만 pauseApp() 를 호출할 수 있다 .
38Mobile Programming
MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (6)(6)
▶ 종료 상태▷ 미들렛이 종료되기 전 기본 설정이나 상태 저장 등 필요한 정보를
저장하고 모든 자원을 해제하는 상태다 . ▷ 미들렛이 실행된 상태거나 정지된 상태에서만 destroyApp() 를
호출할 수 있다 .
39Mobile Programming
MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (7)(7)
▶ 그래픽 기반 MIDlet 프로그램 구조
40Mobile Programming
import javax.microedition.midlet.*;import javax.microedition.lcdui.*;
public class 클래스명 MIDlet extends MIDlet { Display display; 클래스명 Canvas canvas_; public 클래스명 MIDlet() {
display = Display.getDisplay(this); canvas_ = new 클래스명 Canvas(); } public void startApp() { display.setCurrent(canvas_); } public void pauseApp() { ... } public void destroyApp(boolean unconditional) { ... }}
클래스명 MIDlet.java클래스명 MIDlet.java
MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (8)(8)
▶ 그래픽 기반 미들렛 프로그램 구조 ( 계속 )
41Mobile Programming
import javax.microedition.lcdui.*;
class 클래스명 Canvas extends Canvas { public 클래스명 Canvas() { ... } public void paint(Graphics g) { ... }}
클래스명Canvas.java
클래스명Canvas.java
MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (9)(9)
▶ Canvas 클래스 객체화▷ Canvas 클래스를 상속받아 ‘클래스명 Canvas’클래스에서
paint() 메소드에 Graphics 객체를 이용하여 원하는 형태를 구현한다 .
▶ 클래스 선언▷ Canvas 클래스를 상속받아‘클래스명 Canvas’클래스를 선언한다 . ▷ Canvas 클래스는 낮은 수준의 이벤트를 처리하고 , 출력 장치로
이동할 때는 그래픽을 호출하는 응용 프로그램을 작성한다 .
▶ paint() 메소드▷ Canvas 를 렌더링하는 메소드다 . ▷ 그래픽을 화면에 출력하려면 반드시 구현해야 한다 .▷ paint() 메소드 블록에 정의된 내용이 그대로 화면에 표시된다 .
42Mobile Programming
간단한 간단한 MIDletMIDlet 프로그램 예제 프로그램 예제 (1)(1)
▶ 문자열 출력 프로그램
43Mobile Programming
실행 결과 화면
01 import javax.microedition.midlet.MIDlet;02 import javax.microedition.lcdui.*;0304 public class FirstMIDlet extends MIDlet{05 private Display display;06 private TextBox textbox;0708 public FirstMIDlet() {09 display = Display.getDisplay(this);10 textbox = new TextBox("First MIDlet", "첫 번째 미들렛 ", 20, TextField.ANY);11 }12 public void startApp() {13 display.setCurrent(textbox);14 }15 public void pauseApp() { }16 public void destroyApp(boolean unconditional) { }17 }
FirstMIDlet.javaFirstMIDlet.java
간단한 간단한 MIDletMIDlet 프로그램 예제 프로그램 예제 (2)(2)
▶ 도형과 문자열 출력 프로그램
44Mobile Programming
실행 결과 화면
01 import javax.microedition.midlet.*;02 import javax.microedition.lcdui.*;0304 public class SecondMIDlet extends MIDlet {05 private Display display;06 private SecondCanvas canvas_;0708 public SecondMIDlet() {09 display = Display.getDisplay(this);10 canvas_ = new SecondCanvas();11 }12 public void startApp() {13 display.setCurrent(canvas_);14 }15 public void pauseApp() { }16 public void destroyApp(boolean unconditional) { }17 }18
SecondMIDlet.javaSecondMIDlet.java
간단한 간단한 MIDletMIDlet 프로그램 예제 프로그램 예제 (3)(3)
▶ 도형과 문자열 출력 프로그램 ( 계속 )
45Mobile Programming
19 class SecondCanvas extends Canvas {20 private Font largeFont;21 String explainText[] = {"[ 게임설명 ]", " 본 게임은“ , 22 " 커서를 이용하여 ", "1 분 동안 4 곳의“ , 23 " 다른 부분을 찾는 ", " 게임입니다 ."};22 public SecondCanvas(){23 largeFont = Font.getFont(Font.FACE MONOSPACE, Font.STYLE_PLAIN, Font.SIZE_LARGE);24 }25 public void paint(Graphics g) {26 g.setColor(255, 255, 255);27 g.fillRect(0, 0, getWidth(), getHeight());28 g.setColor(0, 0, 0);29 g.fillRoundRect(60, 60, 120, 150, 20, 20);30 g.setColor(255, 255, 255);31 g.setFont(largeFont);
SecondMIDlet.javaSecondMIDlet.java
간단한 간단한 MIDletMIDlet 프로그램 예제 프로그램 예제 (4)(4)
▶ 도형과 문자열 출력 프로그램 ( 계속 )
46Mobile Programming
SecondMIDlet.javaSecondMIDlet.java32 g.drawString(explainText[0], getWidth()/2, 65, Graphics.TOP | Graphics.HCENTER);33 int y = 95;34 for(byte i=1; i < explainText.length; i++){35 g.drawString(explainText[i], 65, y, Graphics.TOP | Graphics.LEFT);36 y+=20;37 }38 }39 }