Dari post sebelumnya, saya telah membahas secara singkat mengenai swing worker. Unutk post kali ini saya akan memberikan contoh sederhana implementasi dari swing worker.
Pertama kita buat GUI seperti dibawah ini. Nama frame nya yaitu SwingWorkerFrameExample berikan nama variable untuk text area dengan nama textArea dan variable untuk button start yaitu start serta untuk button stop yaitu stop.
Untuk memudahkan kita dalam melakukan pemanggilan objek dari frame diatas, kita tambahkan method seperti dibawah ini, caranya kita masuk ke source dari frame dan tuliskan code dibawah ini.
private static SwingWorkerFrameExample swingWorkerFrameExample;
public static SwingWorkerFrameExample getInstance(){
if(swingWorkerFrameExample==null){
swingWorkerFrameExample= new SwingWorkerFrameExample();
}
return swingWorkerFrameExample;
}
public JTextArea getTextArea() {
return textArea;
}
Selanjutna kita buat kelas, contoh kelasnya yaitu SwingWorkerExample yang mengextends ke kelas SwingWorker. codenya seperti dibawah ini.
import javax.swing.SwingWorker;
/**
*
* @author adi nuralim adinuralim@gmail.com
* @since 20-Jan-2013
*/
public class SwingWorkerExample extends SwingWorker<Void, Void> {
public static SwingWorkerExample swingWorkerExample;
public static SwingWorkerExample getInstance(){
if(swingWorkerExample==null){
swingWorkerExample= new SwingWorkerExample();
}
return swingWorkerExample;
}
@Override
protected Void doInBackground() throws Exception {
//masukan statement.....
while(true){
//menampilkan string ke texarea dari frame
SwingWorkerFrameExample.getInstance().getTextArea().append("adicodes.blogspot.com\n");
Thread.sleep(1000);
}
}
}
Jika kita telah membuat kelas tersebut, kelas itu akan melakukan overaide method doInBackground dari kelas SwingWorker. dimethod tersebut kita masukan statement yang akan dieksekusi dengan background thread. Untuk kasus sekarang, statement yang saya buat yaitu menampilkan "http://adicodes.blogspot.com/". artinya ketikan program dijalankan, maka akan tampil kelayar "http://adicodes.blogspot.com/" terus menerus.
Kemudian kita berikan sebuah aksi untuk button start. button start ini berfungsi untuk menjalankan background thread yang telah kita buat.
code programnya seperti dibawah ini.
private void startActionPerformed(java.awt.event.ActionEvent evt) {
//mengecek thread di cancel atau tidak
if (SwingWorkerExample.getInstance().isCancelled()) {
//isCanceled
SwingWorkerExample swe = new SwingWorkerExample();
SwingWorkerExample.swingWorkerExample=swe;
swe.execute();
} else {
//false
SwingWorkerExample.getInstance().execute();
}
}
Setelah kita memberikan aksi untuk button start, sekarang kita berikan aksi juga untuk button stop. fungsinya untuk menghentikan background thread.
private void stopActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
SwingWorkerExample.getInstance().cancel(true);
}
Oke, sekarang kita coba running, maka hasilnya akan seperti berikut ini :
Selamat mencoba, semoga bermanfaat.