J2ME'de Merhaba Dünya Yazdırmak

Hello World in Java ME

Sonunda ben de, yazılmcıların efsanesi olan Merhaba Dünya, ya da Frenkçe ifadesiyle "Hello World" fenomeninin bir örneğini anlatma fırsatını yakaladım. Daha önce bahsetmiştim: Gökten Üç Elma Düşmüş: J2SE, J2EE ve J2ME. Bu kardeşlerden en küçüğü J2ME, yani Java Micro Edition. Bu platformda bir uygulama yazmak, diğer Java platformlarına göre daha biraz değişik. Her ne kadar aynı dili konuşan kardeşler olsalar da çalışma şartları birbirlerinden ayrılmalarını zorunlu kılıyor.

Daha evvelinden Java'da appletlerle ilgilenmiş olanlar, bir masaüstü Java uygulamasının appletten farklı olduğunu görmüşlerdir. Java ME'deki fark da buna benziyor. Java'da bir sınıfın çalıştırılabilir olması için içine bir main metodunun bulunması farzdır (istisnalar kaideyi bozmaz) Fakat appletlerde ve Java ME'de durum biraz değişik.

Java ME'de yazılan uygulamalara midlet adı veriliyor. Midletlerin çalıştırılması için içlerinde hayat döngülerini sağlayan üç metodun bulunması farz. Bunlar:startApp(), pauseApp() ve destroytApp()

Yani çok basitçe bir iskelet kod vermek gerekirse, midletimiz şu şekilde olmalıdır:
import javax.microedition.midlet.*;
public class uygulama extends MIDlet {
public uygulama() { }
public void startApp() { }
public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
}

Tam burada, Java ME'de görsel kullanıcı arayüzü (GUI) kullanımına girmemiz gerekiyor, çünkü midletimizin normal şartlarda illa ki görsel bir şeyler sunması gerekmez.

Midletlerin başlıca görseli Displayable sınıfı nesneleridir. Bunlardan çok alaveresi olmayan TextBox sınıfı bizim için rahat bir tercih olacaktır. Displayable sınıfı LCDUI kütüphanesinde bulunduğundan onu da olaya dahil ettikten sonra, TextBox nesnesini global değişken olarak tanımlamak gerekiyor.
import javax.microedition.lcdui.*;

TextBox nesnesine t adı verelim (private ya da public olması şu an çok önemli değil);
private TextBox t;

Yapılandırıcının (constructor) içinde de yeni nesne olarak atayalım;
t =new TextBox("Selamlar","Merhaba Dunya",20,0)
TextBox sınıfının yapılandırıcısı içine dört parametre alıyor. İlki String biçiminde bir başlık, ikincisi de String biçiminde olan içerik, üçüncüsü int olarak TextBox'un karakter limiti, bir de son olarak TextBox'un içeriğini kısıtlamaya yarayan ayarları gösteren int değer. Bu değerleri TextField sınıfının içinde yer alan değerlerden alınabilir ya da karşılığında bize gereken int değer direk olarak atanabilir. Bu örnekte TextField.ANY değeri, ya da bunun karşılığı olan 0'ı aldık. Yani TextBox'umuzun içine "istediğimiz karakter yazılabilir" kısıtlaması.

Bundan sonra midletin çalıştırılması için startApp() metodu içinde görsel öğeyi çağırırız:
Display.getDisplay(this).setCurrent(t);

Burada Display, static bir sınıf, getDisplay() metoduyla o an kullanmakta olduğumuz ekran görüntüsünü this parametresiyle seçiyoruz. Bunun da setCurrent() metoduyla o anki ekranı t objesi olarak ayarlıyoruz.

Tüm kodu toparlarsak, şöyle bir şey elimizde olmalı;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MerhabaDunya extends MIDlet{
private TextBox t;
public MerhabaDunya(){
t=new TextBox("Selamlar","Merhaba Dünya",20,0);
}
public void startApp(){
Display.getDisplay(this).setCurrent(t);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}
}

Bu örnekte çok basitçe MIDlet mantığından bahsetmeye çalıştım. Yoksa bunlardan başka programdan çıkış için örneğin, bir komut dinleyici gerçeklememiz (implement) ve bunun için de başka metodlar yazmamız gerekiyordu. Karmaşıklık olmaması için bunlara değinmedim, o da daha sonraki yazılara inşallah. Smiling

Fotoğraf: The Digital Blue Wave

Yeni yorum gönder

Bu alanın içeriği gizli tutulacak ve açıkta gösterilmeyecektir.
  • Web sayfası ve e-posta adresleri otomatik olarak bağlantıya çevrilir.
  • Kullanabileceğiniz HTML kodları: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><b><i>
  • Satır ve paragraflar otomatik olarak bölünürler.
  • Textual smileys will be replaced with graphical ones.

Biçimleme seçenekleri hakkında daha fazla bilgi