Java ME
 
Üye Girişi
E-mail:

Şifre:



 
Blog Arama Motoru
 
Email Aboneliği
Yeni yazılar yazıldığında email adresinize bildirim gelmesini isterseniz aşağıdaki formu doldurabilirsiniz.
(Hizmet FeedBurner tarafından sağlanmaktadır.)

Email:

 
 
Merhaba Java ME
İlk java me uygulamam
   Öss dönemindeyken sürekli deneme sınavı yapar ve sınavdan çıkar çıkmaz puanımızı hesaplamaya koyulurduk. Onu çarp, bununla topla... uzun iş. Bu işi cep telefonlarına yaptırmamı sağlayacak bir programlama dili arayışına girdim. Java, Carbide C++, VB AppForge, Phyton gibi diller ile cep telefonlarına uygulama yazabileceğini öğrenip hemen denemelere başladım. İlk olarak Carbide.C++'ı ve sonra Javayı denedim. Ama o zamanlar C bilmediğim için pek bir şey anlayamadan bıraktım. Bana visual basicin mantığına daha yakın bir dil gerekiyordu; VB AppForge'u buldum. Ama üreticisi ona verdiği desteği geri çekince öylece kaldı o da. Sıra geldi Phyton'a. Phyton ile yazılmış programları inceleye inceleye Symbian 60 serisi üzerinde çalışabilen, deneme sınavı sonuçlarını hesaplamaya yarayan oldukça basit bir uygulama yazdım. Böyle basit bir uygulama için bile bu kadar uğraşmış olmam, mobil uygulama geliştirme hevesimi kaçırmıştı o zamanlar...

   Bu dönem okulda java dilini de görmeye başladık. Javanın şimdilik işime yarayacağını düşündüğüm tek sürümü Java ME(Micro Edition). Taşınabilir mobil cihazlar için özelleştirilmiş bu sürümü ile Java destekli tüm cep telefonlarına, pdalara uygulama yazılabiliyor. Başlangıç olsun diye ders programını cep telefonunda kaydedip görebilmemi sağlayacak minik bir uygulama yazdım. Böylece Java ME'ye de bir merhaba demiş oldum.

   Yukarıda ekran görüntüsü bulunan uygulamanın kodu:
package DP;

import java.util.Calendar;
import java.util.Date;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
 * Hüseyin Atasoy
 * 02/04/2010
 */

// Canvas sınıfını miras al
class Tuvalim extends Canvas {
    private String baslik, icerik;
    private Font baslikf = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
    private Font yazif = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_SMALL);
    private Midletim isteyen;

    Tuvalim(Midletim _isteyen) {
        isteyen = _isteyen;
    }

    public void paint(Graphics g) {
        g.setColor(255, 255, 255);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(0, 0, 0);
        g.setFont(baslikf);
        g.setColor(0, 0, 255);
        g.drawString(baslik, 10, 2, Graphics.TOP | Graphics.LEFT);
        g.setColor(200, 0, 0);
        g.drawLine(5, 18, getWidth() - 8, 18);
        g.setFont(yazif);
        g.setColor(0, 0, 0);

        //Canvasta alt satıra geçişi olmadığı için alt satır geçişlerini bizim düzenlememiz lazım
        icerik = " " + icerik;
        String satir = "";
        int yukaridan = 23;
        //int i = 1;
        int konum = 0, oncekiKonum;
        while (true) {
            oncekiKonum = konum + 1;
            konum = icerik.indexOf('\n', konum + 1);
            try {
                satir = icerik.substring(oncekiKonum, konum);
            } catch (Exception ex) {
                satir = icerik.substring(oncekiKonum, icerik.length());
                break;
            } finally {
                satir = satir.trim();
                if (satir.length() > 0) {
                    g.drawString(satir, 10, yukaridan, Graphics.TOP | Graphics.LEFT);
                    //Yanlarda 1), 2)... görünmesini istiyorsan alttakini aktifleştir.
                //g.drawString((i++) + ") " + satir, 10, yukaridan, Graphics.TOP | Graphics.LEFT);
                }
                yukaridan = yukaridan + 15;
            }
        }
    }

    void yaz(String _baslik, String _icerik) {
        baslik = _baslik;
        icerik = _icerik;
    }

    protected void keyPressed(int keycode) {

        switch (keycode) {
            case Canvas.KEY_NUM0:
                isteyen.goster(isteyen.gunIsmi);
                break;
            case Canvas.KEY_NUM1:
                isteyen.goster("Pazartesi");
                break;
            case Canvas.KEY_NUM2:
                isteyen.goster("Salı");
                break;
            case Canvas.KEY_NUM3:
                isteyen.goster("Çarşamba");
                break;
            case Canvas.KEY_NUM4:
                isteyen.goster("Perşembe");
                break;
            case Canvas.KEY_NUM5:
                isteyen.goster("Cuma");
                break;
            case Canvas.KEY_NUM6:
                isteyen.goster("Cumartesi");
                break;
            case Canvas.KEY_STAR:
                isteyen.duzenle();
                break;
            case Canvas.KEY_POUND:
                isteyen.hakkinda();
                break;
        }
    }
}

//MIDlet sınıfını miras al ve CommandListener interface'ini tamamla...
public class Midletim extends MIDlet implements CommandListener {
    private int gun = 0;
    public String gunIsmi = "";
    private String simdiki = "";
    kayitci kayitlar;
    private Tuvalim T1;
    private Command bugun = new Command("Bugün", Command.ITEM, 0);
    private Command pazartesi = new Command("Pazartesi", Command.ITEM, 0);
    private Command sali = new Command("Salı", Command.ITEM, 0);
    private Command carsamba = new Command("Çarşamba", Command.ITEM, 0);
    private Command persembe = new Command("Perşembe", Command.ITEM, 0);
    private Command cuma = new Command("Cuma", Command.ITEM, 0);
    private Command cumartesi = new Command("Cumartesi", Command.ITEM, 0);
    private Command duzenle = new Command("Düzenle", Command.ITEM, 0);
    private Command hakkinda = new Command("Hakkında", Command.ITEM, 0);
    private Command cikis = new Command("Çıkış", Command.EXIT, 0);
    private Command iptal = new Command("İptal", "İptal", Command.EXIT, 0);
    private Command kaydet = new Command("Kaydet", "Kaydet", Command.ITEM, 0);
    private TextBox textBox = new TextBox(" ", null, 400, TextField.ANY);

    //MIDlet sınıfına ait startApp() fonksiyonunun implementasyonu
    public void startApp() {        
        gunNum();
        hangiGun();
        try {
            kayitlar = new kayitci("DersProgrami");
        } catch (Exception ex) {
        }
        goster(gunIsmi);
        textBox.addCommand(kaydet);
        textBox.addCommand(iptal);
        textBox.setCommandListener(this);
    }

    //MIDlet sınıfına ait destroyApp() fonksiyonunun implementasyonu
    protected void destroyApp(boolean unconditional) {
        Display.getDisplay(this).setCurrent(null);
        notifyDestroyed();
    }

    //MIDlet sınıfına ait pauseApp() fonksiyonunun implementasyonu
    protected void pauseApp() {
    }

    //CommandListener interface'ine ait commandAction() fonksiyonunun implementasyonu
    public void commandAction(Command command, Displayable displayable) {

        if (displayable == textBox) {
            if (command == iptal) {
                Display.getDisplay(this).setCurrent(Tuval());
            } else if (command == kaydet) {
                kaydet(simdiki, textBox.getString());

                goster(simdiki);
            }
        } else {
            if (command == bugun) {
                goster(gunIsmi);
            } else if (command == pazartesi) {
                goster(pazartesi.getLabel());
            } else if (command == sali) {
                goster(sali.getLabel());
            } else if (command == carsamba) {
                goster(carsamba.getLabel());
            } else if (command == persembe) {
                goster(persembe.getLabel());
            } else if (command == cuma) {
                goster(cuma.getLabel());
            } else if (command == cumartesi) {
                goster(cumartesi.getLabel());
            } else if (command == duzenle) {
                duzenle();
            } else if (command == hakkinda) {
                hakkinda();
            } else if (command == cikis) {
                destroyApp(true);
            }
        }
    }

    public void gunNum() {
        Calendar a = Calendar.getInstance();
        a.setTime(new Date());
        gun = a.get(a.DAY_OF_WEEK);
        Display.getDisplay(this).setCurrent(Tuval());
    }

    public void hakkinda() {
        Alert alert = new Alert("Hakkında");
        alert.setString("Hüseyin Atasoy, 02/04/2010");
        alert.setType(AlertType.INFO);
        alert.setTimeout(Alert.FOREVER);
        Display.getDisplay(this).setCurrent(alert, Tuval());
    }

    public void duzenle() {
        textBox.setTitle(simdiki);
        textBox.setString(kayitlar.kayitOku(simdiki));
        Display.getDisplay(this).setCurrent(textBox);
    }

    public void hangiGun() {
        switch (gun) {
            case 1: //Pazar günü tatil o gün ders mi olur, Pazartesi gününü göster...
                gunIsmi = "Pazartesi"; break;
            case 2:
                gunIsmi = "Pazartesi"; break;
            case 3:
                gunIsmi = "Salı"; break;
            case 4:
                gunIsmi = "Çarşamba"; break;
            case 5:
                gunIsmi = "Perşembe"; break;
            case 6:
                gunIsmi = "Cuma"; break;
            case 7:
                gunIsmi = "Cumartesi"; break;
        }
    }

    public Tuvalim Tuval() {
        if (T1 == null) {
            T1 = new Tuvalim(this);
            T1.addCommand(bugun);
            T1.addCommand(pazartesi);
            T1.addCommand(sali);
            T1.addCommand(carsamba);
            T1.addCommand(persembe);
            T1.addCommand(cuma);
            T1.addCommand(cumartesi);
            T1.addCommand(duzenle);
            T1.addCommand(hakkinda);
            T1.addCommand(cikis);
            T1.setCommandListener(this);

        }
        return T1;
    }

    public void goster(String hangiGunu) {
        simdiki = hangiGunu;
        String kayit = "";

        kayit = kayitlar.kayitOku(simdiki);
        if (kayit == null) {
            kayit = "  -- Ayarlanmamış --";
        }

        try {
            Tuval().yaz(hangiGunu, kayit);
            Tuval().repaint();
        } catch (Exception ex) {
            Alert alert = new Alert("Kayıt Yok");
            alert.setString("Bu güne ait bir kayıt bulunmuyor!");
            alert.setType(AlertType.WARNING);
            alert.setTimeout(Alert.FOREVER);
            Display.getDisplay(this).setCurrent(alert, textBox);
        }
        Display.getDisplay(this).setCurrent(Tuval());
    }

    public void kaydet(String hangiGun, String dProg) {
        try {
            kayitlar.ekle(hangiGun, dProg);
            kayitlar.kaydet();
        } catch (Exception ex) {
        }
    }
}

   RMS veritabanı okuma/yazma sınıfı:
package DP;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.*;
import javax.microedition.rms.*;

/**
 * RecordStore Okuma Yazma Sınıfı
 * Hüseyin Atasoy
 * 02/04/2010
 */

public class kayitci {

    private String vtIsmi;
    private Hashtable hashTablom;

    public kayitci(String _vtIsmi) throws RecordStoreException, IOException {
        vtIsmi = _vtIsmi;
        hashTablom = new Hashtable();
        yukle();
    }

    public String kayitOku(String anahtar) {
        return (String) hashTablom.get(anahtar);
    }

    public void ekle(String anahtar, String deger) {
        if (deger == null) {
            deger = "";
        }
        hashTablom.put(anahtar, deger);
    }

    private void yukle() throws RecordStoreException, IOException {
        RecordStore rs = null;
        RecordEnumeration re = null;

        try {
            rs = RecordStore.openRecordStore(vtIsmi, true);
            re = rs.enumerateRecords(null, null, false);
            while (re.hasNextElement()) {
                byte[] baytDizi = re.nextRecord();

                ByteArrayInputStream bin = new ByteArrayInputStream(baytDizi);
                DataInputStream din = new DataInputStream(bin);
                String kayit = new String(din.readUTF());

                //ismi ayıkla
                int index = kayit.indexOf('|');
                String isim = kayit.substring(0, index);
                String deger = kayit.substring(index + 1);
                ekle(isim, deger);
            }
        } finally {
            if (re != null) {
                re.destroy();
            }
            if (rs != null) {
                rs.closeRecordStore();
            }
        }
    }

    public void kaydet() throws RecordStoreException, IOException {
        RecordStore rs = null;
        RecordEnumeration re = null;
        try {
            rs = RecordStore.openRecordStore(vtIsmi, true);
            re = rs.enumerateRecords(null, null, false);

            // Tüm kayıtları sil
            while (re.hasNextElement()) {
                int id = re.nextRecordId();
                rs.deleteRecord(id);
            }

            // Sonra da kayıtları yerleştir
            Enumeration anahtarlar = hashTablom.keys();
            while (anahtarlar.hasMoreElements()) {
                String anahtar = (String) anahtarlar.nextElement();
                String deger = kayitOku(anahtar);
                String kayit = anahtar + "|" + deger;

                //maksat utf kodlamasıyla yazılsın, yoksa Türkçe karakterler görünmüyor
                ByteArrayOutputStream bout = new ByteArrayOutputStream();
                DataOutputStream dout = new DataOutputStream(bout);
                dout.writeUTF(kayit);

                byte[] baytDizi = bout.toByteArray();
                rs.addRecord(baytDizi, 0, baytDizi.length);
            }
        } finally {
            if (re != null) {
                re.destroy();
            }
            if (rs != null) {
                rs.closeRecordStore();
            }
        }
    }
}
Yayınlanma Tarihi: 04 Nisan 2010 Pazar - 22:06
Anahtar Kelimeler: java me, micro edition, java, cep telefonları, uygulama geliştirmek, yazmak, nokia, symbian, series60
Yorumlar ( 2 )
mehmet
#1

20/08/2010, 17:45

javanın en kötü yanı. küçük bir harf hatasını bile kabul etmemesi. program yazarken sıkıntı oluşturuyor.. Özellikle büyük küçük harf olayında...
Hüseyin Atasoy
#2

20/08/2010, 17:53

Evet katılıyorum. Ctrl+Space sağolsun :)
Yorum/Görüş Bildir
Yorumları html kodu veya özel karakter kullanmadan, yazım kurallarına
dikkat ederek ve düzgün bir Türkçe kullanarak yazalım...
 
Atasoy Blog v3.0 © 2009-2012 Hüseyin Atasoy | Tema Tasarımı: Hüseyin Atasoy