La creazione di orologio digitale con un filo

Sto cercando di creare un orologio digitale gratuito che utilizza un Thread come questo mi sembra il modo più logico lo si farebbe.
Io non sono sicuro se sto andando su di esso nel modo giusto, ma quello che avevo in mente è quello di creare la corrente iniziale ora di Sistema utilizzando il JFrame costruttore e visualizzare come testo utilizzando un’etichetta. Nel costruttore creo l’oggetto del thread con cui aggiornare il tempo.

Un po ‘ fatica e speravo in qualche consiglio su come farlo nel modo giusto.

setDefaultCloseOperation((JFrame.EXIT_ON_CLOSE));
        setBounds(50, 50, 200, 200);

        JPanel pane = new JPanel();
        label = new JLabel();

        //Font localTime = new Font("Lumina", Font.BOLD , 24);

        pane.add(label);
        add(pane);
        sdf = new SimpleDateFormat("HH:mm:ss");
        date = new Date();

        s = sdf.format(date);
        label.setText(s);
        setVisible(true);
        runner = new Thread(this);

        while(runner == null)
        {
            runner = new Thread(this);
            runner.start();

        }

Questo è quindi il mio metodo run() per aggiornare l’orologio ogni secondo.

public void run()
{
    while(true)
    {
        try
        {
            Thread.sleep(1000);
            sdf = new SimpleDateFormat("HH:mm:ss");
            date = new Date();
            s = sdf.format(date);
            label.setText(s);
        }
        catch(Exception e){}

    }

Metodo Main.

public static void main(String[] args)
{
    new DigitalClock().setVisible(true);


}
  • Nello specifico, cosa siete alle prese con l’? Sembra anche come corridore non sarà mai nullo, come si crea e assegna un oggetto Thread ad esso, poco prima, mentre(runner == null) controllare. Oh, e +1 esclusivamente per la rarità di vedere un compito domanda che, in realtà, ha cercato prima di chiedere qui 🙂
InformationsquelleAutor Arianule | 2012-01-20



3 Replies
  1. 2

    L’etichetta di stato deve essere aggiornato in Caso di Spedizione Thread.

    È necessario aggiungere la seguente modifica:

        SwingUtilities.invokeLater(new Runnable() {
    
            @Override
            public void run() {
                label.setText(s);
            }
        });

    invece di semplicemente aggiornando l’etichetta dal thread separato.

    Vale la pena di guardare la semplice descrizione di Lo Swing GUI Problema di blocco ed è di semplice soluzione.

  2. 2

    Cosa vuoi migliorare? Sembra ok, while(runner == null) non necessario, sei inizializzazione runner appena sopra.

Lascia un commento