web-dev-qa-db-fra.com

Comment faire pour retarder Java pour quelques secondes?

Salut tout ce que j'ai ce code. Je veux retarder mon programme de quelques secondes et afficher "scanning ..." 

Voici ce que j'ai. Cela compile mais ne retarde rien

 if (i==1){

        try {
            Thread.sleep(1);
        } catch (InterruptedException ie)
        {
            System.out.println("Scanning...");
        }

    }

merci d'avance J'ai int i = 1 avant évidemment

6
user2918193

Si vous voulez faire une pause, utilisez Java.util.concurrent.TimeUnit:

TimeUnit.SECONDS.sleep(1);

Dormir une seconde ou 10 minutes

TimeUnit.MINUTES.sleep(10);

Ou le sommeil

try        
{
    Thread.sleep(1000);
} 
catch(InterruptedException ex) 
{
    Thread.currentThread().interrupt();
}

voir aussi la documentation officielle https://docs.Oracle.com/javase/tutorial/essential/concurrency/sleep.html

TimeUnit.SECONDS.sleep() appellera Thread.sleep. La seule différence est la lisibilité et l'utilisation de TimeUnit est probablement plus facile à comprendre pour des durées non évidentes

mais si vous voulez résoudre votre problème

        int timeToWait = 10; //second
        System.out.print("Scanning")
        try {
            for (int i=0; i<timeToWait ; i++) {
                Thread.sleep(1000);
                System.out.print(".")
            }
        } catch (InterruptedException ie)
        {
            Thread.currentThread().interrupt();
        }
6
venergiac

Thread.sleep() prend en attente le nombre de millisecondes, pas de secondes.

Dormir pendant une milliseconde n'est pas perceptible. Essayez Thread.sleep(1000) de dormir pendant une seconde.

2
Oleksi

Ceci est dans un mouseEvent btw 

Si cela se trouve dans une interface graphique Swing, supprimez tous les appels à Thread.sleep(...) car vous risqueriez de mettre la totalité de l'interface graphique en veille, ce qui la rendrait inutile. Utilisez plutôt un minuteur Swing pour générer des retards dans l’interface graphique tout en lui permettant de mettre à jour ses graphiques.

Vous voudrez également éviter les appels System.out.println(...), sauf lors du débogage, et afficher à la place les notifications des utilisateurs dans l'interface graphique elle-même, éventuellement dans un JLabel d'état ou sous forme de boîte de dialogue.

Vous avez System.out.println("Scanning...") dans un bloc catch. Voulez-vous mettre cela en essai?

2
DreamUth

Java:

Pour calculer les temps, nous utilisons cette méthode:

import Java.text.SimpleDateFormat;
import Java.util.Calendar;


    public static String getCurrentTime() {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    return sdf.format(cal.getTime());
}

Seconde: 

import Java.util.concurrent.TimeUnit;

System.out.println("Start delay of 10 seconds, Time is: " + getCurrentTime());
TimeUnit.SECONDS.sleep(10);
System.out.println("And delay of 10 seconds, Time is: " + getCurrentTime());

Sortie:

Départ différé de 10 secondes, le temps est: 14:19:08 

Et le retard de 10 secondes, le temps est de: 14:19:18

Minutes:

import Java.util.concurrent.TimeUnit;

System.out.println("Start delay of 1 Minute, Time is: " + getCurrentTime());
TimeUnit.MINUTES.sleep(1);
System.out.println("And delay of 1 Minute, Time is: " + getCurrentTime());

Sortie:

Départ différé de 1 minute, le temps est de: 14:21:20

Et le retard de 1 minute, le temps est: 14:22:20

Millisecondes:

import Java.util.concurrent.TimeUnit;

System.out.println("Start delay of 2000 milliseconds, Time is: " +getCurrentTime());
TimeUnit.MILLISECONDS.sleep(2000);
System.out.println("And delay of 2000 milliseconds, Time is: " + getCurrentTime());

Sortie:

Délai de démarrage de 2000 millisecondes, le temps est de: 14:23:44

Et un retard de 2000 millisecondes, le temps est de: 14:23:46

Ou:

Thread.sleep(1000); //milliseconds
2
Gavriel Cohen

Selon la documentation Java, Thread.sleep est défini comme suit: 

Thread.sleep(t);
where t => time in millisecons to sleep

Si vous voulez dormir pendant 1 seconde, vous devriez avoir:

Thread.sleep(1000);
1
Kakarot

Quelques problèmes, vous ne tardez pas beaucoup (.sleep est exprimé en millisecondes et non en secondes) et vous essayez d'imprimer dans votre instruction catch. Votre code devrait ressembler davantage à:

if (i==1) {
    try {
        System.out.println("Scanning...");
        Thread.sleep(1000); // 1 second
    } catch (InterruptedException ex) {
        // handle error
    }
}
1
Rogue

déplacez l'instruction System.out pour bloquer définitivement.

0
sps

Utilisez Thread.sleep(2000); // 2000 pendant 2 secondes

0
Crime_Master_GoGo