Java Swing UI Membeku Kerana Thread.sleep()
Dalam pengaturcaraan Java, menggunakan Thread.sleep() boleh menjadi cara yang mudah untuk membuat jeda dalam pelaksanaan. Walau bagaimanapun, apabila ia berkaitan dengan aplikasi Swing, menggunakan Thread.sleep() secara tidak sengaja boleh meletakkan UI ke dalam keadaan beku.
Isu ini berlaku kerana Thread.sleep() menyekat pelaksanaan urutan semasa, iaitu biasanya Benang Penghantaran Acara (EDT) dalam aplikasi Swing. EDT bertanggungjawab untuk mengendalikan semua acara UI, seperti klik butang, pergerakan tetikus dan mengecat semula. Apabila EDT disekat oleh urutan tidur, UI menjadi tidak bertindak balas dan kelihatan beku.
Penyelesaian Menggunakan Pemasa
Untuk mengelakkan isu ini dan mengekalkan UI yang responsif, pertimbangkan untuk menggunakan javax.swing.Timer dan bukannya Thread.sleep(). Pemasa membolehkan anda menjadualkan tugasan untuk dilaksanakan selepas kelewatan yang ditentukan tanpa menyekat EDT. Berikut ialah contoh:
<code class="java">Timer t = new Timer(1000 * 5, new ActionListener() { public void actionPerformed(ActionEvent e) { // do your recurring task } });</code>
Dalam contoh ini, pemasa dicipta untuk melancarkan acara tindakan setiap lima saat. Pendengar tindakan yang ditentukan kemudiannya boleh melaksanakan tugas berulang, seperti menyemak direktori untuk perubahan. Dengan menjadualkan tugas menggunakan pemasa, tugas itu dilaksanakan di luar EDT, menghalang UI daripada menjadi tidak bertindak balas.
Atas ialah kandungan terperinci Mengapa UI Java Swing Saya Membeku Apabila Menggunakan Thread.sleep()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!