Saya memiliki fungsi spesifik yang ingin saya jalankan setelah 5 detik. Bagaimana saya bisa melakukannya di Jawa?
Saya menemukan javax.swing.timer, tapi saya tidak bisa mengerti cara menggunakannya. Sepertinya saya mencari sesuatu yang lebih sederhana daripada kelas ini.
Silakan tambahkan contoh penggunaan sederhana.
Jawaban:
EDIT:
javadoc mengatakan:
sumber
import java.util.Timer; import java.util.TimerTask;
mungkin membuatnya lebih jelas bahwa ini bukanjavax.swing.Timer
. / Catatan, jika Anda menggunakan Swing (dan sebenarnya AWT), Anda tidak boleh melakukan apa pun untuk mengganti komponen pada utas Non-Event Dispatch Thread (EDT) (java.util.Timer
tugas buruk;javax.swing.Timer
tindakan baik).cancel
metode pencatat waktu di akhir metode jalankan akan membersihkan utas eksekusi TimerTasks.Sesuatu seperti ini:
Ada berbagai metode pabrik lain
Executor
yang dapat Anda gunakan sebagai gantinya, jika Anda menginginkan lebih banyak utas di kolam.Dan ingat, penting untuk mematikan eksekutor ketika Anda selesai. The
shutdown()
Metode akan bersih menutup kolam thread ketika tugas terakhir telah selesai, dan akan memblokir sampai ini terjadi.shutdownNow()
akan segera mengakhiri kolam utas.sumber
Contoh penggunaan
javax.swing.Timer
Kode ini hanya akan dieksekusi sekali, dan eksekusi terjadi dalam 3000 ms (3 detik).
Seperti yang disebutkan camickr, Anda harus mencari " Cara Menggunakan Pengatur Waktu Ayunan " untuk pengantar singkat.
sumber
Kode saya adalah sebagai berikut:
sumber
Sebagai variasi jawaban @tangens: jika Anda tidak sabar menunggu pengumpul sampah untuk membersihkan utas Anda, batalkan penghitung waktu di akhir metode jalankan Anda.
sumber
Timer t
boleh dideklarasikanfinal
karena sedang diakses di dalam kelas batin?Pertanyaan awal Anda menyebutkan "Timer Ayun". Jika sebenarnya pertanyaan Anda terkait dengan SWing, maka Anda harus menggunakan Timer Swing dan BUKAN util.Timer.
Baca bagian dari tutorial Swing tentang " Cara Menggunakan Pengatur Waktu " untuk informasi lebih lanjut.
sumber
Anda bisa menggunakan fungsi Thread.Sleep ()
Fungsi Anda akan dieksekusi setelah 4 detik. Namun ini dapat menghentikan sementara seluruh program ...
sumber
ScheduledThreadPoolExecutor
memiliki kemampuan ini, tetapi cukup kelas berat.Timer
juga memiliki kemampuan ini tetapi membuka beberapa utas meskipun hanya digunakan sekali.Berikut ini adalah implementasi sederhana dengan tes (tanda tangan dekat dengan Handler.postDelayed Android ):
Uji:
sumber
while
hanya untuk mengabaikan interupsi.Semua unswers lain perlu menjalankan kode Anda di dalam utas baru. Dalam beberapa kasus penggunaan sederhana, Anda mungkin hanya ingin menunggu sedikit dan melanjutkan eksekusi dalam utas / aliran yang sama.
Kode di bawah ini menunjukkan teknik itu. Perlu diingat ini mirip dengan apa yang java.util.Timer lakukan di bawah tenda tetapi lebih ringan.
Implementasi DelayUtil
sumber
sumber