itu kenapa didalam runnable ada thread lagi >.< bukannya runnable itu sendiri merupakan thread ? dan juga kenapa ada yield ngapit itu ? cara initiate n run thread kamu gimana ?
thanks, Wiyanto 2010/4/5 Niksen Harjanto <[email protected]> > > > rekan2, saya punya aplikasi pake swing (desktop) untuk komunikasi YM. > Aplikasi ini kerjanya simple, pas terima message dari friend di save > ke tabel X (DB), trus ada 1 timer/thread yang baca tabel Y ada message > baru ga untuk di kirim ke friend. > > Untuk proses receiving message udah sukses. > Yang bermasalah itu pas program ditambah rutin2 untuk baca dari tabel DB. > Asalnya saya pake Timer, tapi rutin2 untuk receiving message malah ga > jalan. Saya sih curiganya main thread kemakan abis sama Timer. > Buktinya pas Timer dinon aktifkan, rutin2 receiving message jalan > lagi. > Saya kepikiran untuk pake Thread (thread tambahan), nah anehnya pake > Thread tambahan juga masih sama, malah lebih parah dari sebelomnya. > Tampilan log message di komponen JFrame ga tampil sama sekali... > program keliatan seperti hang. > > Di JFrame program ada sebuah JTextArea, trus saya punya 1 prosedur > untuk menampilkan string message ke dalam JTextArea itu. Di daleem > prosedur itu isinya cuma menampilkan string message yang sudah > ditambah jam saat itu. > > public void addMessageList(String strMessage) { > txtLog.append(new ClsConverter().getNow_dd_MMM_yyyy_hh_mm_ss() > + " - " + strMessage + dbConnection.END_OF_LINE); > } > > prosedur ini dipake sama main thread untuk nampilin log aplikasi. > > untuk thread tambahan saya bentuk kaya gini (ThreadClass ada di dalam > kelasnya JFrame) : > > private class ThreadClass implements Runnable { > private Thread thread; > private ClsDatabaseConnection dbConnection; > > public ThreadClass(ClsDatabaseConnection dbConnection) { > this.pnlYM = pnlYM; > this.dbConnection = dbConnection; > thread = new Thread(this); > thread.setPriority(Thread.MIN_PRIORITY); > } > > public void run() { > while(true) { > Thread.yield(); > ThreadMethod.onExecuted(txtLog, dbConnection); > Thread.yield(); > try { > thread.sleep(2000); > } > catch (InterruptedException ex) { > } > } > } > } > > Method yang dipanggil waktu run() (ThreadMethod ada di luar kelas JFrame) : > > class ThreadMethod { > synchronized static void onExecuted(JTextArea txtLog, > ClsDatabaseConnection dbConnection) { > Thread.yield(); > txtLog.append(new ClsConverter().getNow_dd_MMM_yyyy_hh_mm_ss() > + " - " + "From Thread..." + dbConnection.END_OF_LINE); > Thread.yield(); > System.out.println("Thread"); > } > } > > waktu di running, di log output-nya NetBeans keluar kata "Thread" > setiap 1 detik, tapi tampilan JFrame ko jadi freeze ya... padahal saya > udah kasih statement Thread.yield() untuk ngasih waktu processor untuk > eksekusi thread lain. > > Kira2 salahnya di mana ya? > mohon bantuannya.... > > Terima kasih... > >

