Rumah  >  Artikel  >  Java  >  Mengapa UI Java Swing Saya Membeku Apabila Menggunakan Thread.sleep()?

Mengapa UI Java Swing Saya Membeku Apabila Menggunakan Thread.sleep()?

Susan Sarandon
Susan Sarandonasal
2024-11-03 02:54:28454semak imbas

Why Does My Java Swing UI Freeze When Using Thread.sleep()?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn