Rumah > Java > javaTutorial > teks badan

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

Susan Sarandon
Lepaskan: 2024-11-03 02:54:28
asal
453 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan