Saya mencoba melakukan sesuatu di Java dan saya perlu sesuatu untuk menunggu / menunda selama beberapa detik dalam satu loop sementara.
while (true) {
if (i == 3) {
i = 0;
}
ceva[i].setSelected(true);
// I need to wait here
ceva[i].setSelected(false);
// I need to wait here
i++;
}
Saya ingin membangun sequencer langkah dan saya baru di Jawa. Ada saran?
java
wait
sleep
thread-sleep
ardb
sumber
sumber
Thread.Sleep()
.Thread.sleep(<milisecondsToSleep>)
. Thes
seharusnya tidak dikapitalisasi.Jawaban:
Jika Anda ingin berhenti kemudian gunakan
java.util.concurrent.TimeUnit
:Tidur selama satu detik atau
Tidur sebentar.
Karena ini adalah loop, ini menyajikan masalah bawaan - drift. Setiap kali Anda menjalankan kode dan kemudian tidur, Anda akan terhanyut sedikit dari berlari, katakanlah, setiap detik. Jika ini merupakan masalah maka jangan gunakan
sleep
.Lebih jauh,
sleep
tidak terlalu fleksibel dalam hal kontrol.Untuk menjalankan tugas setiap detik atau pada penundaan satu detik saya akan sangat merekomendasikan
ScheduledExecutorService
danscheduleAtFixedRate
atau atauscheduleWithFixedDelay
.Misalnya, untuk menjalankan metode
myTask
setiap detik (Java 8):Dan di Jawa 7:
sumber
TimeUnit.SECONDS.wait(1)
melemparIllegalMonitorStateException
di Java 8.1 build 31 di Windows 6.3. Sebagai gantinya, saya dapat menggunakanThread.sleep(1000)
tanpa mencoba / menangkap.Unhandled exception: java.lang.InterruptedExecution
untuksleep(1)
TimeUnit.SECONDS.sleep(1);
dengantry catch
Gunakan
Thread.sleep(1000)
;1000
adalah jumlah milidetik yang akan dijeda oleh program.sumber
Anda harus menggunakan
Thread.sleep()
panggilan.Info lebih lanjut di sini: http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html
sumber
Gunakan ini:
maka Anda dapat memanggil metode ini di mana saja seperti:
sumber
Menggunakan
TimeUnit.SECONDS.sleep(1);
atauThread.sleep(1000);
Apakah cara yang dapat diterima untuk melakukannya. Dalam kedua kasus Anda harus menangkapInterruptedException
yang membuat kode Anda Bulky.Ada perpustakaan java Open Source disebut MgntUtils (ditulis oleh saya) yang menyediakan utilitas yang sudah berurusan denganInterruptedException
di dalam. Jadi kode Anda hanya akan mencakup satu baris:Lihat javadoc di sini . Anda dapat mengakses perpustakaan dari Maven Central atau dari Github . Artikel yang menjelaskan tentang perpustakaan dapat ditemukan di sini
sumber
catch (InterruptedException e) { /* empty */ }
adalah TIDAK solusi yang masuk akal di sini. Paling tidak, Anda harus memberikan beberapa informasi log. Untuk informasi lebih lanjut tentang subjek ini, lihat javaspecialists.eu/archive/Issue056.htmlGunakan
Thread.sleep(100);
. Satuan waktu adalah milidetikSebagai contoh:
sumber
Saya tahu ini adalah posting yang sangat lama tetapi ini dapat membantu seseorang: Anda dapat membuat metode, jadi kapan pun Anda perlu menjeda, Anda dapat mengetik
pause(1000)
atau nilai milidetik lainnya:Ini dimasukkan tepat di atas
public static void main(String[] args)
, di dalam kelas. Kemudian, untuk memanggil metode, ketikpause(ms)
tetapi gantims
dengan jumlah milidetik untuk berhenti. Dengan begitu, Anda tidak perlu memasukkan seluruh pernyataan try-catch kapan pun Anda ingin berhenti.sumber