Rumah > Java > javaTutorial > teks badan

Bagaimana Menggunakan SwingWorker dan Pemasa untuk Mengemas kini JLabel dengan Keputusan Tugasan Jangka Panjang di Jawa?

Barbara Streisand
Lepaskan: 2024-10-23 23:24:30
asal
233 orang telah melayarinya

How to Use SwingWorker and Timer to Update JLabel with Results of Long Running Tasks in Java?

Gunakan SwingWorker untuk Mengemas kini JLabel Berulang Kali dengan Keputusan Tugasan Jangka Panjang

Soalan ini menangani keperluan untuk mengemas kini JLabel secara berkala dengan hasil daripada tugas yang berpanjangan. Untuk mencapai matlamat ini menggunakan Java, seseorang harus menggunakan gabungan Pemasa Swing dan SwingWorker.

Pemasa Ayunan untuk Tugasan Berulang

Pemasa Ayunan menyediakan cara mudah untuk menjadualkan berulang tugasan dalam GUI. Dalam kes ini, kami akan menggunakan Pemasa untuk melaksanakan tugas jangka panjang pada selang masa yang tetap.

SwingWorker untuk Tugasan Jangka Panjang

SwingWorker ialah subkelas SwingUtilities yang membolehkan melaksanakan tugas dalam urutan yang berasingan, memastikan GUI responsif. Di sini, SwingWorker akan melaksanakan tugas yang telah lama dijalankan iaitu ping pelayan dan mengemas kini JLabel dengan hasilnya.

Contoh Pelaksanaan

Kod berikut menunjukkan cara melaksanakannya pendekatan:

<code class="java">import java.awt.event.*;
import javax.swing.*;

public class PingLabelUpdater {

    public static void main(String[] args) {
        final JLabel label = new JLabel("0000");
        ActionListener timerListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new PingWorker().execute();
            }
        };
        Timer timer = new Timer(1000, timerListener);

        label.setFont(label.getFont().deriveFont(120f));
        JOptionPane.showMessageDialog(null, label, "stackoverflow.com", JOptionPane.INFORMATION_MESSAGE);
        timer.stop();
    }

    static class PingWorker extends SwingWorker {
        int time;
        @Override
        protected Object doInBackground() throws Exception {
            time = pingTime("stackoverflow.com");
            return new Integer(time);
        }
        @Override
        protected void done() {
            label.setText("" + time);
        }
    }

    public static int pingTime(String hostnameOrIP) {
        Socket socket = null;
        long start = System.currentTimeMillis();
        try {
            socket = new Socket(hostnameOrIP, 80);
        } catch (Exception e) {
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (Exception e) {}
            }
        }
        long end = System.currentTimeMillis();
        return (int) (end - start);
    }
}</code>
Salin selepas log masuk

Dalam contoh ini, kaedah pingTime mewujudkan sambungan ke pelayan yang ditentukan (stackoverflow.com) dan mengukur masa yang diperlukan. Kaedah doInBackground SwingWorker melakukan ping, dan kaedah yang dilakukannya mengemas kini label dengan masa ping. Pemasa dikonfigurasikan untuk melaksanakan SwingWorker pada selang 1000 milisaat (1 saat).

Dengan menggabungkan Pemasa Swing dan SwingWorker, kami mengemas kini JLabel dengan masa ping dengan berkesan tanpa menyekat urutan GUI, memastikan pengguna responsif antara muka semasa tugas berjalan di latar belakang.

Atas ialah kandungan terperinci Bagaimana Menggunakan SwingWorker dan Pemasa untuk Mengemas kini JLabel dengan Keputusan Tugasan Jangka Panjang di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!