Salah satu yang paling menjengkelkan ketika membuat program yang berhubungan dengan Hardware adalah proses komunikasi dengan hardware. Kenapa? karena biasanya proses komunikasi ini memerlukan waktu, dan biasanya lagi proses ini membuat program/aplikasi Stack (Hung) untuk beberapa saat.
Untuk mengatasi masal tersebut, terutama saat bekerja dengan Komponen Swing adalah menggunakan class SwingWorker. definisi Swing Worker Menurut Sun adalah:
"SwingWorker is designed for situations where you need to have a long running task run in a background thread and provide updates to the UI either when done, or while processing. Subclasses of SwingWorker must implement the doInBackground() method to perform the background computation",Kurang lebih terjemahannya kaya gini:" SwingWorker dirancang untuk situasi di mana Anda perlu memiliki tugas lain yang berjalan jangka panjang pada thread latar belakang sekaligus meng-update UI. Subclass dari SwingWorker harus menerapkan method doInBackground () untuk melakukan perhitungan latar belakang." (kalo ada yang jago bahasa inggris benerin yah).
Oke gak perlu panjang lebar lagi, kita mulai membuat contoh implementasi SwingWorker untuk mengirim SMS Menggunakan Gammu.
Yang Perlu Disediakan :D
1. Java JDK dan Netbeans 7 (Atau terserah mau pake yang berapa pun)
2. Gammu for Linux (saya pake yang buat Ubuntu 11.04)
Langkah ke 1
Buat Project pada Netbeans kasih nama sesuai dengan keinginan.
(Silahkan baca http://onta-programing.blogspot.com/2008/12/buat-project-baru-di-netbeans.html untuk mengetahui membuat project di Netbeans)
Langkah Ke 2
Rancang frame dan tambahkan beberapa komponen Swing, rancang kurang lebih seperti gambar di bawah ini:
Langkah ke 3
buat method busy(boolean b):
private void busy(boolean b){ txnohp.setEnabled(!b); txcontent.setEnabled(!b); progress.setVisible(b); }
Langkah Ke 4
Tambahkan Kode ini pada bagian konstruktor Frame. Tambahkan setelah initComponents();
busy(false);
Langkah Ke 5
buat method kirim sms:
private void kirimSMS(final String noHP, final String sms){ gammuWorker = new SwingWorker() { @Override protected String doInBackground() throws Exception { busy(true); Runtime runtime = Runtime.getRuntime(); if(sms.length() <= 153){ //Untuk Windows //runtime.exec( pathGammu + " -c " + pathGammurc + " TEXT " + noHP + " -text \""+ sms + "\""); //Untuk linux runtime.exec("gammu --sendsms TEXT " + noHP + " -text \""+ sms + "\""); return "Pesan Terkirim"; } else { return "Pesan Lebih dari 153 Karakter"; } } @Override protected void done() { try { //Cek apakah proses pengiriman pesan selesai? String pesan = get(); JOptionPane.showMessageDialog(null, pesan); } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Pesan tidak dikirimkan. Alasan:\n" + ex.getMessage()); } finally { busy(false); } } }; gammuWorker.execute(); }
Langkah ke 6
Supaya menarik pake Nimbus Look And Feel
public static void main(String args[]) { try { //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (ClassNotFoundException ex) { Logger.getLogger(GammuSwingFrame.class.getName()).log(Level.SEVERE, null, ex); } catch (InstantiationException ex) { Logger.getLogger(GammuSwingFrame.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(GammuSwingFrame.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedLookAndFeelException ex) { Logger.getLogger(GammuSwingFrame.class.getName()).log(Level.SEVERE, null, ex); } java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new GammuSwingFrame().setVisible(true); } }); }
Kalo dah dijalankan coba test....
ini Screenshootnya:
Sourcecodenya:
http://www.4shared.com/file/9wfXSTBq/GammuSwingWorker.html
Kalau ada Pertanyaan silahkan Komentar
ane mau nanya nih tempat ane kok masih saja error [io]
BalasHapusprogramnya hanya untuk mengirimkan 1 sms. Bagaimana jika kasusnya bisa mengirimkan ke banyak nomor?
BalasHapusapakah program ini juga bisa untuk menerima sms?
Maaf banyak nanya-nanya,,
semoga artikelnya berguna dan bermanfaat
@gendon: posting gan error codenya
BalasHapus@valorkedungjati: bisa aja, tinggal di looping aja fungsi mengirim smsnya.
Komentar ini telah dihapus oleh pengarang.
BalasHapusBlackonta (Taopik Ridwan) said...
BalasHapus@valorkedungjati: bisa aja, tinggal di looping aja fungsi mengirim smsnya.
>> jika memang di looping apakah harus ditambahkan sesuatu untuk GUInya agar bisa multisms pengirimannya...
Mohon bantuannya.
Di GUI gak perlu di tambahin apa2 cukup di kodingnya aja, cuma kalo mau lebih atraktif GUInya bisa diambahin dengan progressbar
BalasHapusmas, kok kalo ngirm yang mengandung spasi kok nggak bisa ya mas ya
BalasHapuspunya ane keluar error gan :D
BalasHapusjava.io.IOException: Cannot run program "gammu": CreateProcess error=2, The system cannot find the file specified
install dulu gammunya gan, sudo apt-get gammu
Hapusgan sama ane juga error kaya mas Trihadi, dan saya menggunakan windows7 .. tapi solusi dari mas RDOne barakah itu menggunakan ubuntu .. apa ada gak ya solusi buat windows7?
BalasHapusmaaf gan saya nanya2 maklum masih newbie :D
semoga postingan ini bermanfaan :)
Ubah path Gammunya gan
HapusKomentar ini telah dihapus oleh pengarang.
Hapuscara looping sms ke banyak nomor bagaimana mas??|
BalasHapusmohon bantuannya
sourcecode nya gak bisa di download..
BalasHapus