Minggu, 12 Juni 2011

Membuat Aplikasi SMS sederhana

tanpa banyak basa basi lang aja ya coy,,,,,

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import javax.microedition.midlet.*;
import java.util.*;
import java.io.IOException;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.wireless.messaging.*;
/**
 * @author Administrator
 */
public class smsku extends MIDlet implements CommandListener, Runnable,
MessageListener {
    Display display;
Form form;
List menuList; //list untuk menu awal
Command exitCom, replyCom, backCom, clrCom, sendCom; //command yg digunakan
TextBox textSmsMasuk, textSmsKeluar; //tempat text sms yg masuk & yg mau dikirim
TextField textNo; //untuk tempat memasukan no tujuan
String port, isiSmsKeluar; //port dan isi sms
Thread thread;
String[] connections;
boolean done;
MessageConnection smsconn;
Message msg;

public smsku() {
display = Display.getDisplay(this);
form = new Form("sms-an Yuk");
exitCom = new Command("keluar", Command.EXIT, 1);
replyCom = new Command("balas", Command.SCREEN, 1);
backCom = new Command("Kembali", Command.BACK, 3);
clrCom = new Command("Hapus Tulisan", Command.OK, 2);
sendCom = new Command("Kirim", Command.OK, 1);
menuList = new List("Menu sms Ku", List.IMPLICIT);
port = "4321"; //port yang aku gunakan, ganti sesuai keinginan masing masing
textSmsMasuk = new TextBox(null, null, 500, TextField.ANY);
textSmsKeluar = new TextBox("Silakan Menulis Sms", null,
500, TextField.ANY);
textNo = new TextField("Masukan Nomor Tujuan", "",
15, TextField.PHONENUMBER);
}

    public void startApp() {
    bukaKoneksi(); //disini membuka koneksi untuk siap menerima sms masuk
menu(); // bikin tampilan menu awal
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    //sebelum aplikasinya keluar ato mati koneksi ditutup dulu
done = true;
thread = null;
if (smsconn != null) {
try {
smsconn.close();
} catch (IOException e) {
}
}

//disini mati deh aplikasi kita
notifyDestroyed();
}
    public void menu() { //membuat menu awal untuk sementara ini baru ada 3 menu
menuList.append("Tulis Sms", null);//1. menu tulis sms baru
menuList.append("About", null);//2. menu about (gak penting sih sebenarnya)
menuList.append("Keluar", null);//3. menu untuk keluar aplikasi
menuList.addCommand(exitCom);  //add command keluar
menuList.setCommandListener(this);
display.setCurrent(menuList);
}

public void tulisSms() { //membuat textbox untuk menulis sms baru
textSmsKeluar.addCommand(sendCom); //add command untuk kirim
textSmsKeluar.addCommand(clrCom);  // add command untuk clear text
textSmsKeluar.addCommand(backCom); //add command untuk kembali kemenu awal
textSmsKeluar.setCommandListener(this);
display.setCurrent(textSmsKeluar);
}

public void masukNo() { //disini untuk memasukan nomor tujuan
form.setTitle("Sms Siap dikirim"); //udah taukan yang ini?
form.append(textNo); //menambahkan textField untuk nomor tujuan
form.addCommand(backCom); //menambahkan command untuk kembali ke menu awal
form.addCommand(sendCom); //menambahkan command untuk mengirim
form.setCommandListener(this);
display.setCurrent(form);
}

public void kirim() { //disini sms yang udah ditulis dikirim dgn perintah
new Thread(new Runnable() {
//perhatiin ya
public void run() {
try {
String isiSms = isiSmsKeluar;
String noTujuan = textNo.getString();
String address = "sms://" + noTujuan + ":" + port;
MessageConnection smsConnKir = null;
Message isiSmsNya = null;
smsConnKir = (MessageConnection) Connector.open(address);
TextMessage txtmessage =
(TextMessage) smsConnKir.newMessage(MessageConnection.TEXT_MESSAGE);
txtmessage.setAddress(address);
txtmessage.setPayloadText(isiSms);
isiSmsNya = txtmessage;
smsConnKir.send(isiSmsNya);

} catch (Throwable t) {
t.printStackTrace();
}
}
}).start();
}

public void terima(String isi, String no, Date tgl) { //tempat sms masuk
String nonya = fixNomer(no);
textSmsMasuk = new TextBox("Sms dari:" + nonya + " " + tgl, isi,
isi.length(), TextField.ANY);
textSmsMasuk.addCommand(replyCom);
textSmsMasuk.addCommand(exitCom);
textSmsMasuk.setCommandListener(this);
display.setCurrent(textSmsMasuk);
}

public void bukaKoneksi() { //membuka koneksi agar bisa menerima sms yg masuk
String smsConnection = "sms://:" + port;
done = true;
thread = null;

try {
smsconn = (MessageConnection) Connector.open(smsConnection);
smsconn.setMessageListener(this);
} catch (IOException ioe) {
ioe.printStackTrace();
}

connections = PushRegistry.listConnections(true);

done = false;
thread = new Thread(this);
thread.start();
}

public void tutupKoneksi() { //untuk menutup koneksi sms
try {
smsconn.close();
} catch (IOException e) {
}
}

public String fixNomer(String no) {
//dari format no gini "sms://+6285XXXX" jadi "+6285XXX" gitu fungsinya

String hs = null;
hs = no.substring(6, no.length());
return hs;
}

public void commandAction(Command c, Displayable d) {
if (c == exitCom) {
destroyApp(true);
}
if (d == menuList) {
if (menuList.isSelected(0)) {
tulisSms();
} else if (menuList.isSelected(1)) {
Alert about = new Alert("About", "Aplikasi SMS buatan Febriyanto, " +
     "source-nya saya dapatkan dari Internet",
null, AlertType.INFO);
display.setCurrent(about);
} else if (menuList.isSelected(2)) {
destroyApp(true);
}
}
if (d == textSmsKeluar) {
if (c == sendCom) {
form.deleteAll();
masukNo();
} else if (c == clrCom) {
textSmsKeluar.setString("");
} else if (c == backCom) {
display.setCurrent(menuList);
}
}
if (d == textSmsMasuk) {
if (c == exitCom) {
display.setCurrent(menuList);
} else if (c == replyCom) {
tulisSms();
}
}
if (d == form) {
if (c == backCom) {
form.deleteAll();
display.setCurrent(textSmsKeluar);
} else if (c == sendCom) {
isiSmsKeluar = textSmsKeluar.getString();
textSmsKeluar.setString("");
kirim();
}
}
}

public void run() { //untuk menerima sms yang masuk
try {
msg = smsconn.receive();
String senderAddress = msg.getAddress();
Date waktuSms = msg.getTimestamp();
if (msg instanceof TextMessage) {
String isiSmsMasuk = ((TextMessage) msg).getPayloadText();
terima(isiSmsMasuk, senderAddress, waktuSms);//memasukan sms ke texbok
}
tutupKoneksi();
bukaKoneksi();
} catch (IOException e) {
}
}

public void notifyIncomingMessage(MessageConnection conn) {
if (thread == null) {
done = false;
thread = new Thread(this);
thread.start();
}
}
}

sedangkan hasil ketika dieksekusi adalah sbb :




mengenal bahasa java

Java diperkenalkan pada tahun 1990 oleh James Gosling seorang ahli pemrograman yang bekerja di SUN Microsystem. Sejarah java berawal dari penugasan James Gosling untuk menciptakan program untuk mengendalikan perangkat elektronik rumah tangga. Disamping itu juga program yang dihasilkan harus bersifat multiplatform, tidak tergantung pada salah satu vendor. Proyek tersebut di beri nama dengan proyek green yang dipimpin oleh Patrick Naughton dan James Gosling.
Pada awalnya pemrograman ini diberi nama OAK, namun nama OAK sendiri sudah di pakai oleh bahasa pemrograman lain sehingga OAK diganti dengan nama JAVA. Kata java sendiri diinspirasi saat James Gosling minum secangkir kopi di sebuah kedai kopi yang kemudian secara tidak sengaja salah satu dari mereka menyebut kata java yang berarti kopi. Akhirnya mereka sepakat untuk memberikan nama bahasa pemrograman tersebut dengan nama JAVA.
Akhirnya pada awal tahun 1996, SUN secara resmi merilis versi awal dari JAVA yang kemudian terus berkembang hingga muncul JDK 1.1 (Java Deplopment Kit Versi 1.1). Perkembangan terus dilakukan sampai saat ini, sehingga muncul versi terbaru yang disebut dengan JAVA 2. Pada JAVA 2 terdapat teknologi SWING yang mampu menghasilkan aplikasi desktop yang benar-benar portable.
Pada JAVA 2, platform java sendiri di pilah-pilah menjadi beberapa bagian diantaranya: 

  1. J2SE (Java 2 Standard Edition) untuk aplikasi desktop
  2. J2EE (Java 2 Enterprise Edition) untuk aplikasi webserver termasuk servelt, JSP maupun EJB
  3. J2ME (Java 2 Mobile Edition) untuk aplikasi perangkat mobile
  4. Java Card untuk smart card
Untuk membangun aplikasi Kompresi Dan Enkripsi SMS ini digunakan platform Java 2 Platform Mobile Edition (J2ME).

J2ME merupakan sebuah kombinasi yang terbentuk antara sekumpulan interface Java yang sering disebut dengan Java API(Aplication Programming Interface) dengan JVM (Java Virtual Machine) yang di design khusus untuk alat yaitu JVM dengan ruang yang terbatas. J2ME tersusun atas 2 hirarki yaitu:

Configuration

Suatu configuration menggambarkan fitur minimal dari lingkungan lengkap Java runtime. Untuk menjamin kemampuan portabilitas dan interoperabilitas optimal diantara berbagai macam perangkat yang dibatasi sumber dayanya(memory, prosesor, koneksi yang dibatasi),configuration tidak menggambarkan fitur tambahan. Suatu configuration J2ME menggambarkan suatu komplemen yang minimum dari teknologi JAVA. Adalah merupakan tugas profile-profile untuk menggambarkan tambahan library untuk suatu kategori perangkat tertentu.

Pada J2ME terdapat 2 jenis configuration yaitu:



1. CLDC (Connected Limited Device Configuration) 


CLDC adalah sebuah konfigurasi yang terdapat di dalam J2ME untuk alat-alat yang memiliki keterbatasa ruang memori atau RAM (kurang dari 512 KB) dan pada umumnya di operasikan dengan menggunakan baterai, serta memiliki bandwidth kecil.
2. CDC (Connected Device Configuration)
Connected Device Configuration (CDC) adalah super set dari CLDC. CDC menyediakan lingkungan Java runtime yang lebih luas dibandingkan CLDC dan lebih dekat kepada lingkungan J2SE. CDC Java Virtual Machine (CVM) mendukung penuh Java Virtual Machine (JVM). CDC berisi semua API dari CLDC. CDC menyediakan suatu subset yang lebih besar dari semua class J2SE.
Profile
Suatu profile menggambarkan set-set tambahan dari API dan fitur untuk pasar tertentu, kategori perangkat atau industri. Sementara configuration menggambarkan library dasar, profile-profile menggambarkan library yang penting untuk membuat aplikasi-aplikasi efektif. Library ini memasukkan user interface, jaringan dan penyimpanan API.
Untuk mendesign sebuah aplikasi mobile berbasis Java J2me, di gunakan profile MIDP (Mobile Information Device Profile). The Mobile Information Device Profile (MIDP) berada di atas dari CLDC. Anda tidak bias menulis aplikasi mobile hanya dengan menggunakan CLDC API. Anda harus tetap memanfaatkan MIDP yang mendefinisikan UI. Spesifikasi MIDP, kebanyakan seperti CLDC dan API lainnya sudah digambarkan melalui Java Community Process (JCP). JCP melibatkan sebuah kelompok ahli berasal dari lebih dari 50 perusahaan, yang terdiri atas pabrik perangkat mobile, pengembang software. MIDP terus berkembang, dengan versi-versi masa depan yang telah lulus dari proses ketat JCP.
Suatu aplikasi MIDP disebut MIDlet. Perangkat application management software (AMS) berinteraksi langsung dengan MIDlet dengan method MIDlet create, start, pause, dan destroy. MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta parameter dari AMS seperti dirumuskan dalam application descriptor (JAD).
Suatu MIDlet tidak harus memiliki (dan memang harus tidak mempunyai) sebuah method public static void main(String[] argv).Method tersebut tidak akan dikenal lagi oleh AMS sebagai titik awal sebuah program. kehidupan MIDlet dimulai ketika di-instantiate oleh AMS. MIDlet pada awalnya masuk status “Pause” setelah perintah baru dibuat. AMS memanggil constructor public tanpa argumen dari MIDlet. Jika sebuah exception terjadi dalam constructor, MIDlet memasuki status “Destroyed” dan membuangnya segera. MIDlet masuk ke dalam status “Active” atas pemanggilan method startUp() oleh AMS. MIDlet masuk ke dalam status “Destroyed” ketika AMS memanggil method destroyApp(). Status ini juga kembali diakses ketika method notifyDestroyed() kembali dengan sukses kepada aplikasi. Dengan catatan bahwa MIDlet hanya bisa memasuki status “Destroyed” sekali dalam masa hidupnya.

Rabu, 08 Juni 2011

aturan penomoran bab dengan isi

Penomoran halaman memang sangat mudah kita lakukan, tetapi ada sedikit pengaturan yang perlu kita pelajari bagaimana jika format penomoran tidaklah sama. Misalnya saja kita menulis naskah skripsi atau naskah buku. Tentu ada halaman kata pengantar, halaman daftar isi, daftar gambar dan lain-lain yang biasanya diberi nomor halaman dalam format romawi kecil yang letaknya dibawah tengah(I, ii, iii, iv, v, vi… dan seterusnya) kemudian ada halaman judul bab, misalnya BAB I, BAB II, BAB III dan seterusnya, untuk halaman yang ada judul bab nya seperti itu nomor halaman harus berada di bawah tengah. Kemudian untuk halaman yang lain, nomor halaman berada diatas kanan.

Kalau file nya dibedakan it’s ok, gak masalah, kemudian untuk penulisan nomor halaman pada judul bab bisa diakali dengan menutup nomor tersebut dengan shape, dan membuat textbox untuk meletakkan nomor halaman dibagian bawah. Tapi kalau file nya jadi satu? Nah, gak mungkin dunk seperti itu. Masih ada beberapa temen yang mungkin belum bisa bagaimana mengaturnya (banyak yang tanya saya tentang itu, jadi saya posting ini).

OK langsung saja langkah-langkah yang bisa dilakukan sebagai berikut:
1. Siapkan naskah yang akan diberi penomoran halaman, untuk contoh ini minimal anda harus membuat 3 halaman, lebih banyak lebih bagus supaya bisa lebih mudah dipahami.
2. Ok selanjutnya kita akan memisahkan halaman KATA PENGANTAR, halaman BAB, dan halaman biasa. Ini menggunakan fasilitas BREAK. Kalau di word 2003 letaknya di menu insert—break. Pada word 2007 juga ada di tab insert—page break. Tetapi kita akan menggunakan fasilitas break pada tab PAGE LAYOUT. Kenapa? Karena break pada tab “insert” tidak ada pilihannya, pada tab “pagelayout ada pilihan formatnya, dan ini yang kita gunakan.
3. Letakkan kursor pada akhir baris halaman “kata pengantar”. Tekan enter 1 kali.
4. Klik tab “page layout” kemudian pada ribbon, klik ikon break seperti gambar ini:


5. Setelah itu akan muncul window untuk memilih jenis break yang akan digunakan, pada bagian section break, klik “next page” seperti gambar berikut ini:


6. Selanjutnya kita akan mengatur penomoran halaman “kata pengantar” klik pada halaman pertama “kata pengantar”. Klik tab “insert” klik “page number” sehingga muncul pilihan, dan klik “format page number” seperti gambar ini:


7. Pada jendela yang muncul, lakukan pengaturan seperti gambar berikut ini. Ubah bentuk nomor nya menjadi nomor romawi kecil, dan klik OK


8. Anda akan kembali ke halaman semula. Kenapa? Gak ada nomornya? Memang belum ada, kita baru mengatur format halaman, belum memberi nomor halaman. Sekarang kita beri nomor halaman, klik tab insert, pilih “page number” seperti tadi, tapi yang kita pilih “bottom of page” dan pilih lokasinya, misalnya ditengah halaman.
9. Lihat sekarang nomor halaman sudah tampil seperti yang kita inginkan bukan? Hem…
10. OK sekarang klik ganda pada teks anda, sehingga tidak abu-abu lagi, jadi aktif bagian naskah anda. Klik ganda nya dimana saja bebas yang penting diarea naskah anda.
11. Sekarang lihat ke halaman BAB, disana juga ada nomor halamannya, dan semua halaman terdapat nomor halaman. Lihat punya saya jadi seperti ini:


12. Sekarang kita atur halaman BAB. Klik ganda pada nomor halaman BAB. Sehingga seperti ini yang tampil:


13. Sekarang klik tab “design”. Klik “link to previous” tujuannya supaya tidak sama dengan halaman sebelumnya.
14. Sekarang klik tab insert—pilih page number, pilih format page number, kemudian atur seperti gambar ini:


15. Ok sekarang lihat nomor halaman “kata pengantar” dengan halaman BAB sudah berbeda format. Bagaimana dengan halaman sesudahnya? O..ow… semua masih dibawah halaman, padahal yang kita harapkan diatas kanan halaman.
16. Sekarang klik ganda pada naskah anda, dan masuklah ke halaman BAB. Pada akhir baris dihalaman itu, lakukan break seperti langkah 4 dan 5.
17. Kemudian lakukan pengaturan seperti langkah 12 sampai 14, pada bagian start at, pilih nomor selanjutnya.

Minggu, 05 Juni 2011

membuat player media pada j2me

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.InputStream;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.VolumeControl;
/**
 * @author Administrator
 */
public class MidiPlayer extends MIDlet implements CommandListener {
    private Display display;
  private List menu;
  private Form form;
  private Gauge volume;

  private Player player;
  private VolumeControl vc;

  private final Command cmdKeluar =
    new Command("Keluar", Command.EXIT, 1);
  private final Command cmdMainkan =
    new Command("Mainkan", Command.SCREEN, 1);
  private final Command cmdVolume =
    new Command("Set Volume", Command.SCREEN, 1);
  private final Command cmdOK =
    new Command("OK", Command.OK, 1);
  private final Command cmdBerhenti =
    new Command("Berhenti", Command.OK, 2);

  private final String[] FILE =
     {"File1.mid", "File2.mid", "File3.mid"};

  public MidiPlayer() {
    display = Display.getDisplay(this);

    menu = new List("MIDI Player", Choice.IMPLICIT, FILE, null);

    menu.addCommand(cmdKeluar);
    menu.addCommand(cmdMainkan);
    menu.addCommand(cmdVolume);
    menu.setCommandListener(this);
  }

    public void startApp() {
   form = new Form("Volume");
    volume = new Gauge("Set Volume", true, 10, 5);
    display.setCurrent(menu);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
 public void commandAction(Command c, Displayable s) {
    if (c == cmdKeluar) {
      destroyApp(false);
      notifyDestroyed();
    } else if (c == cmdMainkan) {
      String namaFile = menu.getString(menu.getSelectedIndex());
      playMIDI(namaFile);
      menu.removeCommand(cmdMainkan);
      menu.removeCommand(cmdKeluar);
      menu.removeCommand(cmdVolume);
      menu.addCommand(cmdBerhenti);
    } else if (c == cmdBerhenti) {
      stopMIDI();
    } else if (c == cmdOK) {
      display.setCurrent(menu);
    } else {
      form.append(volume);
      form.addCommand(cmdOK);
      form.setCommandListener(this);
      display.setCurrent(form);
    }
  }
 
  public void playMIDI(String namaFile) {
    try {
      InputStream is = getClass().getResourceAsStream(namaFile);
      player = Manager.createPlayer(is, "audio/midi");
      player.addPlayerListener(new StopListener(this));
      player.realize();
      vc = (VolumeControl) player.getControl("VolumeControl");
      vc.setLevel(volume.getValue() * 10);
      player.start();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  public void stopMIDI() {
    try {
      player.stop();
      player.deallocate();
      player.close();
      player = null;
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  // inner class
  class StopListener implements PlayerListener {
     
    private MidiPlayer midlet;
     
    public StopListener(MidiPlayer midlet) {
      this.midlet = midlet;
    }
     
    public void playerUpdate(Player player,
                             String event, Object data) {
      try {
        if (event.equals(STOPPED) ||
          event.equals(STOPPED_AT_TIME) ||
          event.equals(ERROR) ||
          event.equals(END_OF_MEDIA)) {
          player.deallocate();
          player.close();
          player = null;
          midlet.menu.removeCommand(midlet.cmdBerhenti);
          midlet.menu.addCommand(midlet.cmdMainkan);
          midlet.menu.addCommand(midlet.cmdVolume);
          midlet.menu.addCommand(midlet.cmdKeluar);
        } else if (event.equals(DEVICE_UNAVAILABLE)) {
          player.stop();
        } else if (event.equals(DEVICE_AVAILABLE)) {
          player.start();
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }        
  }
}
hasil eksekusi ketika dijalankan :