«

»

Sep 06

[Bingung] Threading on Java File Transfer

Beberapa minggu ini saya mengerjakan task yang berhubungan dengan Java Threading di tempat magang saya. Jujur, baru kali ini saya berhubungan dengan threading pada java, sebenarnya konsep dari thread ini cukup rumit, tapi setidak nya mengerti sedikit lah, huahahaha…

Task saya kali ini berhubungan dengan File Transfer yang bermasalah ketika mendownload file berukuran besar dari server ke client, berikut kode saya :


public void callThread(final boolean flag, final String localPath, final String tempPath,

final InputStream from, final OutputStream to, final boolean enc){

runnable = new Runnable() {

@Override

public void run() {

if(flag == true){

int i = -1;

try {

while((i=from.read()) != -1){

to.write(i);

}

try {

to.flush();

to.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if (enc) {

new AESCrypto("password", false, localPath, tempPath);

File secureFile = new File(localPath);

if (secureFile.exists()) {

secureFile.deleteOnExit();

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

getMethod.releaseConnection();

}

}else{

System.out.println("running thread");

}

}

};

try {

thread = new Thread(runnable);

thread.start();

thread.sleep(3000);

} catch (Exception e) {

e.printStackTrace();

}

}

Perhatikan baris ke 17-21, disitulah masalah timbul. Program akan terus looping sebanyak byte yang dikirim dari server ke client, kalau misalnya sekali kirim bisa 1kb, berarti untuk mendownload file berukuran 2.5MB akan menyebabkan looping sampai 2500 kali? itulah yang menyebabkan GUI nya menjadi freeze untuk sementara waktu, betul begitu?

Saya sudah mencoba menambahkan threading seperti contoh diatas dan menonaktifkan thread selama 3 detik, and it works! tapi sayangnya selalu pada percobaan pertama download, selalu menampilkan pesan error bahwa file tidak bisa di download, tapi pada percobaan selanjutnya, file bisa di download tanpa error, ini aneh, sangat aneh….>.<

Ketika saya tambah baris code seperti ini pada baris paling bawah code program diatas :


for(int i=0;i&amp;gt;=0;i++){
 if(!thread.isAlive()){
 System.out.println(&amp;quot;Thread Down&amp;quot;);
 break;
 }
 }

Program berjalan dengan sempurna, tapi timbul freeze lagi! Saya benar-benar bingung, apa yang harus dilakukan lagi agar file transfer berjalan dengan baik tanpa menimbulkan freeze pada aplikasi, mengingat tutorial tentang masalah ini di google tidak terlalu banyak, mungkin para pembaca ada yang mengetahui apa yang harus saya lakukan, mungkin saya salah konsep atau salah menerapkan thread pada code tersebut, Tolong di bantu kakak Y__Y

Regards

1 comment

  1. Martin

    Saya telah mencobanya tapi tidak freeze…klo tidak salah freeze itu disebabkan oleh ketika thread itu berjalan maka pemakaian CPU usage akan naik…itu dapat anda lihat pada task manager…
    Mohon maaf jika saya salah asumsi…

    [Reply]

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Get Adobe Flash playerPlugin by wpburn.com wordpress themes