Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Java countdown giorni, ore, minuti,secondi, millesimi di secondo

    Ciao ragazzi vi spiego il mio problema ho realizzato in Eclipse una piccola interfaccia con i miei amici che sono più esperti di programmazione ma c'è un problema. Allora vi spiego meglio il problema: io voglio che si imposti un countdown prestabilito da me cioè che si inizializzi questo contatore a mio piacimento cioé: 2 dd, 3 hh, 20 mm, 30 ss, 320 SSS. Ora vi posto il codice, mi potete dire come modificare quello che ho richiesto ?

    .--------------------------

    import java.awt.event.*;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.GregorianCalendar;


    import javax.swing.*;


    public class CountdownTimer extends JFrame implements ActionListener, Runnable
    {
    private static int dd = 2;
    private long startTime;
    private final static java.text.SimpleDateFormat timerFormat = new java.text.SimpleDateFormat("dd: hh: ss: SSS"+dd);
    private final JButton startStopButton = new JButton("Start/Stop");
    private Thread updater;
    private boolean isRunning = false;
    private final Runnable displayUpdater = new Runnable()
    {
    public void run()
    {

    displayElapsedTime(CountdownTimer.this.startTime - System.currentTimeMillis());
    }
    };
    public void actionPerformed(ActionEvent ae)
    {
    if(isRunning)
    {
    long elapsed = startTime - System.currentTimeMillis();

    isRunning = false;
    try
    {
    updater.join();
    // Wait for updater to finish
    }
    catch(InterruptedException ie) {}
    displayElapsedTime(elapsed);
    // Display End Result
    }
    else
    {
    startTime = 2*60*1000+System.currentTimeMillis();
    isRunning = true;
    updater = new Thread(this);
    updater.start();
    }
    }
    private void displayElapsedTime(long elapsedTime)
    {
    startStopButton.setText(timerFormat.format(new java.util.Date(elapsedTime)));
    }
    public void run()
    {
    try
    {
    while(isRunning)
    {
    SwingUtilities.invokeAndWait(displayUpdater);
    Thread.sleep(50);
    }
    }
    catch(java.lang.reflect.InvocationTargetException ite)
    {
    ite.printStackTrace(System.err);
    // Prints Error - shouldn't ever happen
    }
    catch(InterruptedException ie) {}
    // Ignore and return!
    }
    public CountdownTimer()
    {
    startStopButton.addActionListener(this);
    getContentPane().add(startStopButton);
    setSize(100,50);
    setVisible(true);
    }
    public static void main(String[] arg)
    {
    new CountdownTimer().addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    });
    }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da kobealex Visualizza il messaggio
    mi potete dire come modificare quello che ho richiesto ?
    Innanzitutto quando posti del codice, postalo tra i tag CODE ... così come l'hai appena postato è illeggibile.

    Veniamo ora alle questioni tecniche:
    - hai usato una variabile di flag isRunning per indicare se il thread è in esecuzione ed anche per fermarlo in un secondo momento. La variabile isRunning è quindi "condivisa" tra il thread EDT (quello della interfaccia utente) e il tuo thread specifico. Questa variabile devi marcarla volatile oppure in alternativa usare dei metodi setter/getter synchronized (o comunque sincronizzare get/set su un oggetto).

    Il motivo è semplice: se la variabile non è volatile o non usi la sincronizzazione, non c'è garanzia che la modifica con isRunning = false; fatta nel contesto del EDT venga "vista" nel contesto del tuo thread specifico. Può funzionarti o no, dipende da svariati fattori.

    - Non è necessario per forza usare addWindowListener per poter chiudere il frame. Basta impostare il default close operation sul frame ( setDefaultCloseOperation(EXIT_ON_CLOSE) )

    - più che "modificare" il codice, io direi che sarebbe meglio ripensare il tutto. Innanzitutto dove/come deve essere inserito il tempo del contatore? Cosa dovrebbe succedere quando il tempo scade?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Mmmm mi puoi spiegare meglio cosa modificare ?

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.