m
J2ME
ww w. ja
va
dil
i.c o
NetBeans Kurulumu ve J2ME Giriş
Melih Sakarya www.melihsakarya.com
m
J2ME
i.c o
90’ lı senelerin ortalarinda Sun Microsystems mühendisleri bir çok embeded cihaz üzerinde calışabilecek tek bir platform daha doğrusu ara katman yapmayi amaçlamışlardı ve bu amaçla Java diye bir dil ortaya çıkardılar bu platform ara katmanda dili o makineye ait calıştıralabilir koda çeviriyordu. Ancak internetin ve çalıştırma ortamlarının genişlemesiyle bu platforma bilgisayar ortamlarında da ihtiyaç duyuldu. Java gitgide appletler, servletler ve J2EE mimarisi ile enterprise ortamda yer göstermeye başladı. Yani tek bir uygulamayı Windows, Linux, Unix, Solaris vs... farkı olmadan her ortamda sorunsuz olarak çalıştırabilecektik ki bu uygulamalar bizim şirketimizi belkemiğini oluşturan ERP vs... uygulamalar olacaktı. Ancak yıllar olayı tekrardan tersine çevirdi özellikle mobil cihazların gelişmesi Java’ yı yine bu embeded ortamlarda ihtiyaç duyulur hale getirdi. Bu sebeple başta J2ME (Java Micro Edition) olmak üzere Java Card, Java TV vs... platformlar ortaya çıkarıldı. Bu örnekler git gide çoğalıyor Java ile bu gün buzdolabı, televizyon, cep telefonu, akıllı kartlar, Lego oyuncakları vs... programlanabiliyor.
va
dil
Biz bu bölümde embeded ortamların en önemli ayağını oluşturan J2ME mimarisini inceleyeceğiz. Bu gün dünya üzerinde 550 milyon Java destekli cep telefonu mevcut ve 38 üretici ile hızlı bir şekilde yoluna devam ediyor. Cep telefonu pazarında .Net e karşı %98 gibi bir pazar üstünlüğü olan Java özellikle Nokia, Sony-Ericsson, Siemens, Motorola gibi üreticilerinde desteğiyle pazarını git gide büyütüyor. Bu pazar oldukça dikkat çekici olmakla birlikte piyasada büyük bir açık oluşuyo özellikle mobil uygulama ve uygulama geliştirici sıkıntısı git gide artıyor. Aslında böyle bir sıkıntı olmasına karşın Java ile bu tarz mobil uygulamalar geliştirmek oldukça kolaydır. Özellikle yeni versiyon J2ME ile gelen Midlet 2.0 mimarisinde bir çok yeni kütüphane geldi. Oyun geliştirmek için Game Api, media servisleri için Media Api gibi kütüphaler vardır tabi bunun haricinde pki, socket vs... gibi artı özellikler de sunmaktadır.
ww w. ja
Bu gün piyasada iki tür Java destekli telefon bulunmaktadır bunlar Midlet 1.0 ve Midlet 2.0 olarak ayrilabilir. Eğer Java destekli bir telefon almayı düşünüyorsanız Midlet 2.0 destekli olmasına dikkat edin. J2ME ayrıca konfigirasyon olarakta ayrılmaktadır. Bunlar CDC (Connected Device Configiration) ve CLDC (Connected Limited Device Configiration) olarak ayrılmaktadır. CLDC (Connected Limited Device Configiration) java.io java.lang java.lang.ref java.util javax.microedition.io CDC (Connected Device Configiration) java.io java.lang java.lang.ref java.lang.reflect java.math java.net java.security java.security.cert java.text java.util java.util.jar
i.c o
Midlet 1.0 java.io java.lang java.util javax.microedition.io javax.microedition.lcdui javax.microedition.midlet javax.microedition.rms
m
java.util.zip javax.microedition.io Görüldüğü gibi CDC sınırlı kütüphaneye sahip bir konfigirasyondur günümüzde cep telefonları CLDC konfigirasyonuna sahiptirler. Midletler ise aşağıdaki kütüphane desteklerine göre ayrılırlar.
dil
Midlet 2.0 java.io java.lang java.util javax.microedition.io javax.microedition.lcdui.game javax.microedition.media javax.microedition.media.control javax.microedition.midlet javax.microedition.pki javax.microedition.rms
ww w. ja
va
Yine kütüphanelere baktığımızda midlet 2.0 ile gelen media , media.control, lcdui.game, pki kütüphaneleri dikkat çekiyor. Burada farklara şöyle dikkat çekebiliriz. Örnek olarak Midlet 2.0 da 1.0 daki Canvas tan ayrı olarak GameCanvas adında bir Class gelmiştir bu class yine Canvas class ını miras almıştır. Biz bu class ile çok daha kolay oyun uygulamaları yazabileceğiz yada farkli bir örnek olarak media api ile cep telefonuna özel bir kütüphane olmadan kameraya erişebileceğiz ve bu sayede cep telefonun daha çok özelliğini daha kolay kullanacağız. Biz örneklerimizi yeni nesil olması itibariyle midlet 2.0 üzerinden yapacağız. Ancak öncelikle hangi geliştirme ortamında çalışacağımızı yani uygulamamızı nerede geliştireceğimize bakalım. Geliştirme ortamı için bir çok seçenek mevcut bunlar arasında en çok tercih edilenler Jbuilder (JBuilderX), Jdeveloper (wriless extention), Sun One Studio Mobile Edition, Eclipse (EclipseMe) ve Netbeans (Netbeans Mobility Pack) tir. Biz bunlar arasında Sun Microsystems tarafından çıkarılmış tamemen açık kaynaklı, ücretsiz ve kullanışlı olan NetBeans’ i tercih ediyoruz.
Öncelikle IDE mizi (NetBeans) kurmakla başlayalım. http://www.netbeans.org adresine girip Downloads bölümünden NetBeans IDE ve mobil uygulama geliştirme eklentisi olan NetBeans Mobility Pack i indirelim yanlız son sürümleri olmasına dikkat edelim. İndirme işlemi bittikten sonra kuruluma geçiyoruz ancak dikkat etmemiz gereken bir nokta var öncelikle Java ile uygulama geliştirmek için gerekli olan JDK 1.4.2 (Java Development Kit) veya üzeri bir sürümü kurmamız gerekiyor. Eğer JDK bilgisayarınızda yüklü ise buna gerek yok aksi halde zaten yine Java ile yazılmış olan NetBeans i çalıştıramayız ve uygulamalarımızı geliştiremeyiz. JDK yı indirmek ve kurmak için http://java.sun.com adresinde downloads bölümüne girebilirsiniz. Şimdi JDK yı kurup path ayarlarınızı yaptığınızı varsayıp NetBeans kurulumuna geçiyoruz. Ben bilgisayarıma daha önceden netbeans-4_0-bin-windows.exe yi indirmiştim şimdi buna çift tıklıyorum.
m i.c o dil
ww w. ja
va
Karşıma çıkan ekranda next e tıklayıp ilerliyorum.
İkinci adımda bize lisans haklarını kabul edip etmediğimizi soruyor “I accept the terms in the license agreement” seçeneğini işaretleyip next butonuna tıklayalım.
m i.c o dil
ww w. ja
va
Şimdi NetBeans i hangi klasöre kuracağımızı soruyor burada standart olarak C:\Program Files\netbeans-4.0 karşımıza çıkar tabi bu sürüme göre farklılık gösterebilir. Standart klasörü bırakıp tekrar next butonuna basıp ilerliyoruz.
Şimdi 1.4.2 kendi buldu
karşımıza gerekli olan JDK (Java Development Kit) yı çıkardı eğer JDK yok veya den düşük bir sürüm ise kuruluma devam etmeyecektir aksi halde gerekli pathi bulup devam etmemizi isteyecektir. Benim bilgisayarımda C:\j2sdk1.4.2_07 olarak ve next diyerek devam ediyorum.
m i.c o dil
ww w. ja
va
Şimdi karşımıza kurulum klasörünü çıkardı ve toplam 81.7 MB alana ihtiyaç duyduğunu belitti bu alanın var olduğunu varsayıyoruz ve next butonuna tıklıyoruz.
Evet kurulumumuz başlamış oldu gerekli dosyaları program klasörümüz altına atıyor. En sonun kurulumumuzun bitti belirtiyor ve Finish butonuna tiklayıp kurlumumuzu sonlandırıyoruz.
va
dil
i.c o
m
Artık bilgisayarımıza geliştirme ortamı olarak NetBeans’ i kurmuş olduk masaüstümüzde linki otomatik olarak oluşturuldu. Ancak işimiz henüz bitmedi şimdi NetBeans’ te mobil uygulama geliştirmek için gerekli olan NetBeans Mobility Pack’ i kurmamız gerekiyor. Daha önce indirmiş olduğumuz netbeans_mobility-4_0-win.exe ye çift tıklıyoruz.
ww w. ja
Çıkan ekranda tekrar next deyip ilerliyoruz.
Şimdi mobility pack için lisans haklarını soruyor “I accept the terms in the license agreement” seçeneğini işaretleyip next diyoruz ve sonraki adıma geçiyoruz.
m i.c o dil
ww w. ja
va
Şimdi bize bu mobility packi hangi NetBeans üzerine kurmamız gerektiğini soruyor normal şartlarda bilgisayarımızda bir çok NetBeans IDE yüklü olabilir ancak son kurulu olan default olduğundan direk olarak kurulu olduğu klasörü karşımıza çıkarıyor next deyip ilerliyoruz.
Son olarak normal ide kurulumunda olduğu gibi kapladığu alanı ve kurulacak klasörü gösteriyor. Benim bilgisayarımda C:\netbeansSil\mobility7 klasörüne kurulum yapılacak.
“next” butonuna tıklayında kurulumu başlatmış oluyoruz kurulum sonrasında karşımıza çıkacak ekranda “Finish” deyip kurulumu bitiriyoruz.
ww w. ja
va
dil
i.c o
m
Artık bilgisayarımızda mobil uygulama geliştirme ortamı kurulmuş oluyor tabi bunun dışında NetBeans sayesinde Jsp/Servlet, Applet vs... uygulamalarda geliştirebiliriz. Şimdi ilk uygulamızı geliştirmek için NetBeans i açalım. Bu arada NetBeans için minumum 256 tercihen 512 MB Ram’ e sahip olmanız gerekiyor.
m i.c o dil
ww w. ja
va
Artık NetBeans ekranı karşımızda şimdi File -> New Project deyip karşımıza çıkan ekrandan Categories kısmından Mobile ; Projects kısmındanda Mobile Application ı seçelip next butonuna tıklayalım.
IDE ye bir mobile application oluşturacağımızı belirttik şimdi karşımıza çıkan ekran Project Name (Proje Adı) kısmına bir proje adı yazalım ben Deneme yazdım. Projects Home kısmında proje dosyalarınızın bulunacağı klasörü belirtiyoruz bu kısımda default
va
dil
i.c o
m
klasör olarak bilgisayarınızdaki default user ın klasörü artı proje ismidir mesela benim bilgisayarımda C:\Documents and Settings\msakarya şeklinde oluştu. Alt kısımda iki check alanı bulunuyor bunlardan “Set as Main Project” bu projenin üzerinde çalışacağımız proje olup olmadığının belirlenmesidir bu alanı işaretliyoruz. “Create Hello MIDlet” ise proje ilk oluşturulduğunda HelloMidlet adında bir Midlet class ı oluşturur bunu işaretlemiyoruz ilk midletimizi biz oluşturacağız. Şimdi next butonuna tıklayıp sonraki adıma geçiyoruz.
ww w. ja
Artık son adıma geldik şimdi karşımızda “Platform Selection” diye bir adım var burada midletimizin hangi platformda olacağına (midlet versiyonu, konfigirasyonu vs...) dair adımları belirletiyoruz. İlk olarak “Emilator Platform” u seçelim. Normal şartlarda uygulamamızı yazmayı bitirdikten sonra test etmek için bir cep telefonuna atmamız gerekiyordu ancak bunu her seferinde yapamayacağımızdan bilgisayarımızda bize bu cep telefonu ortamını simüle eden bir uygulama kullanıyoruz aslinda bunun için Sun WTK (Wireless Toolkit) kurmamız gerekiyordu ancak NetBeans Mobility Pack kurulumu ile buna gerek kalmadan kendi NetBeans üzerine kurulumunu yaptı. Gördüğünüz gibi J2ME Wireless Toolkit 2.2 kurulu görülüyor tabi buna ek olarak Sony-Ericsson, Nokia vs... simülatörler kurulabilir. Device bölümünde ise bu toolkit üzerinde gelen cep telefonu similasyonlarını görüyoruz DefaultColorPhone en çok kullanılan telefon modelidir mesela QwertDevice klavye biçiminde tuşları olan telefonları simüle eder. Biz şimdilik DefaultColorPhone olarak seçelim. Device Configiration da ise cep telefonumuzun konfigirasyonunu seçiyoruz iki seçeneğimiz var CLDC 1.0 ve CLDC 1.1. Genel olarak piyasada CLCD 1.0 mevcut yanlız burada telefonunuza göre dikkatli seçim yapmalısınız aksi halde uygulamanızı telefona yüklerken konfigirasyonun uymadığına dair uyarı verecektir. “Device Profile” ise başta dediğimiz gibi midletimizin sürümünü gösteriyor. Biz uygulamalarımızı Midlet 2.0 üzerinde geliştireceğiz. Tüm bu seçimler bittikten sonra “Finish” butonuna tıklıyoruz ve artık projemiz tüm ayarlarıyla birlikte uygulama geliştirmeye hazır hale geliyor. Dikkat ettiyseniz Projects bölümünde Deneme adında bir proje oluştu tabi yeni proje açtıkça bu projeler artar.
m i.c o dil
ww w. ja
va
Şimdi projemiz hazırsa ilk midletimizi oluşturalim. Projemizin (Deneme) üzerine geliyoruz ve sağ tıklayıp New -> MIDlet seçeneğini seçiyoruz.
Gelen ekranda bizden MIDlet Name (Midletin adı), Midlet Class Name (Midlet classının adı), MIDlet Icon (icon olarak bir resim belirleyebiliriz), Package (midletin bulunacağı paket) istenir. Ben midlet ismi olarak MerhabaDunya girdim paket ismi olarakta org.java.test . Şimdi Finish butonuna tıklıyorum ve ilk midletimi oluşturuyorum.
import javax.microedition.midlet.*; import javax.microedition.lcdui.*;
m
package org.java.test;
i.c o
Gösterim 1.1 /* * MerhabaDunya.java * * Created on 01 Aralık 2005 Perşembe, 14:46 */
public void pauseApp() { }
dil
/** * * @author msakarya * @version */ public class MerhabaDunya extends MIDlet { public void startApp() { }
}
va
public void destroyApp(boolean unconditional) { }
Bakın Gösterim 1.1 de oluşturulan kod görülüyor açıklama satırları ve paketler de dahil olmak üzere tüm kodları bizim için oluşturdu.
ww w. ja
Gösterim 1.2 import javax.microedition.midlet.*; import javax.microedition.lcdui.*;
Gösterim 2.2 de import ettiğim (çağırdığım) kütüphaneler. javax.microedition.midlet standart midlet kütüphanesi javax.microedition.lcdui ise adındanda anlaşılacağı gibi user interface yani arayüz (textfieldlar vs...) kütüphanesi. Gösterim 1.3 public class MerhabaDunya extends MIDlet {
Gösterim 1.3 te ise artık classımızı tanımlıyoruz classımızın adı MerhabaDunya bu dosya ismi ile aynı olmalıdır (MerhabaDunya.java). Aynı zamanda bu satırda MIDlet kütüphanesini miras alıyoruz. Bu sayede yeni bir midlet classı yaratmış oluyoruz.
public void pauseApp() { }
i.c o
public void destroyApp(boolean unconditional) { }
m
Gösterim 1.4 public void startApp() { }
ww w. ja
va
dil
Gösterim 1.4 midletimizin gövdesini oluşturuyor. Midlet classı abstract bir class olduğundan bu metodlar implemente edilmelidir. Bu alanda midletin hareketlerine göre işlem yapıyoruz (başlama, durma, kapatılma). startApp() metodu midlet çalıştırıldığında pauseApp() metodu midlet durduğunda, destroyApp(boolean unconditional) ise midlet kapatıldığında çalışan metodlardır.
Şimdi uygulamamızı çalıştıralım bunun için üstteki menüden Run -> Run Main Project e bir kere tıklayalım yada F6 tuşuna basarakta bu işlemi yapabiliriz. Eğer uygulamamızı debug modunda çalıştırmak istiyorsak Debug Main Project e tıklamalı veya F5 tuşuna basmalıyız. Biz şimdilik F6 ile uygulamamızı çalıştıralım.
m i.c o dil
Şimdi karşımıza aşağıda da göründüğü gibi bir cep telefonu simülasyonu çıktı bu simülasyon uygulamamızı aynı telefon ortamındaki gibi çalıştırmamızı sağlayan bir ortam.
ww w. ja
va
Şu an için bizim tek bir midletimiz var bunun ismide “Merhaba Dünya” bunu ekranda görebiliyoruz şimdi telefonun sağ alt köşesinde bulunan Launch seçeneğini seçelim. Telefonumuzda dokunmatik bir ekran yada mause olmadığından bu işlemi aynı cep telefonlarındaki gibi tuşlar vasıtasıyla yapacağız tabi ileriki konularda kalem kullanan P900 tarzı telefonlarda bu kalem eventini dinleyen uygulamalarda yapacağız. Şimdi Launch seçeneğini altındaki tuş vasıtasıyla seçelim. Ben tıklıyorum ancak hiç bir tepki vermiyor ? Acaba neden ? Çünkü şu an için midletin içerisine hiç bir şey yazmadık. Başlangıç anı (startApp() ) yada kurucu metod içerisinde bir şey görünmüyor. O zaman basit bir uygulama ile başlayalım örnek olarak içerisinde sadece bir textBox olan bir uygulama yazalım. Gösterim 1.5 /* * MerhabaDunya.java * * Created on 01 Aralık 2005 Perşembe, 14:46 */ package org.java.test;
import javax.microedition.midlet.*; import javax.microedition.lcdui.*;
/** * * @author Melih Sakarya * @Version 1.0 */ public class MerhabaDunya extends MIDlet { public void startApp() {
textAlani=
new
TextBox("Yazı
public void pauseApp() { }
içerik
i.c o
public void destroyApp(boolean unconditional) { }
Alanı","Burası
m
TextBox alanı",20,TextField.ANY); }
}
Şimdi bu uygulamamızda textAlani adında basit bir TextBox (bu bileşen ile ilgili detayları arayüzler bölümünde bulabilirsiniz) oluşturduk. F6 tuşuna basalım ve uygumamızı çalıştıralım bakalım ne olacak. Launch seçeneğini seçiyorum ancak yine bir tepki yok ? Çok garip oysaki bir TextBox oluşturmuştuk. Bunun nedeni ne olabilir ? Bunu şöyle açıklayabiliriz midletler bileşenleri ekranlara (Display) atarlar yani bir bileşeni göstermemiz gerekiyorsa oluşturduktan sonra onu ekrana set etmeliyiz. Peki bunu nasıl yapacağız.
va
package org.java.test;
dil
Gösterim 1.6 /* * MerhabaDunya.java * * Created on 01 Aralık 2005 Perşembe, 14:46 */
import javax.microedition.midlet.*; import javax.microedition.lcdui.*;
ww w. ja
/** * * @author Melih Sakarya * @Version 1.0 */ public class MerhabaDunya extends MIDlet { public void startApp() { TextBox textAlani= new TextBox("Yazı Alanı","içerik alanı",20,TextField.ANY); Display ekran = Display.getDisplay(this); ekran.setCurrent(textAlani); } public void pauseApp() { } public void destroyApp(boolean unconditional) { }
}
Bakın burada öncelikle Display adında bir nesne oluşturum Display.getDisplay(this); metodu ile bu midlete ait Display i ekran isimli değişkene atadım. Artık ekran bizim şimdi ekran üzerinde çeşitli işlemler yapabiliriz. ekran.setCurrent(textAlani); ile ekrana textAlani isimli bileşeni atıyoruz. Bu sayede artık o bileşen ekranda görünmeye başlayacak.
m i.c o dil
va
Şimdi uygulamamızı test etmek için çalıştıralım F6 ya basıyoruz ve Launch seçeneğimizi seçip midletimizi çalıştıralım. Evet sonunda çalıştı artık ilk midletimizi yazmış olduk. Dikkat ettiyseniz “Yazı Alanı” başlık yani title alanı olarak görülüyor “Burası içerik alanı” yazan yer ise TextBox içeriğini gösteriyor.
ww w. ja
Görüldüğü gibi midlet yazmak o kadar da zor değilmiş basit bir Java veya en azından programlama bilgisi olan bir insan J2ME ile çok olay uygulama geliştirebilir.