IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Stopper un programme Java en cours d'exécution


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Points : 64
    Points
    64
    Par défaut Stopper un programme Java en cours d'exécution
    Salut !

    Je voudrais savoir comment faire pour arrêter un programme Java en cours d'exécution sans perdre les données traiter pendant cette exécution (donc sans le CTR+Z dans le terminal par exemple).

    L'idéal serait d'entrer un certain temps en paramètre et que si le temps d’exécution dépasse ce temps, le programme s’arrête et affiche les données traitées dans le programme.

    Auriez vous une solution à me proposer ?

    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Vérifier régulièrement si le temps n'a pas été dépassé. Si oui, s'arrêter.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Points : 64
    Points
    64
    Par défaut
    Mais comment s'arrêter ? Je ne peux pas faire de simple break car je ne suis pas dans une boucle et exit(0) me ferme complètement le programme.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Raikyn Voir le message
    Mais comment s'arrêter ?
    En cessant de faire quelque chose.

    Citation Envoyé par Raikyn Voir le message
    Je ne peux pas faire de simple break car je ne suis pas dans une boucle.
    Alors des if. "S'il n'est pas encore temps de s'arrêter, faire ceci."

    Ou des return. Et si tu te dis, "mais, je ne suis pas dans une méthode dont je veux sortir," bah change ton code pour que ce soit le cas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Points : 112
    Points
    112
    Par défaut
    Comme te l'a dit thelvin tu met un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (/*le temps est dépassé*/){
       // tu affiches tes résultats
       System.out.println(tesResultats);
       // puis tu termines avec un retour pour quitter ton programme
       return 0;
       // ou avec la méthode exit
       System.exit(0);
    }
    Où la mettre?
    Vu que tu as dis que ton programmes fait des choses et que tu veux l'arreter toi même, c'est que t'as mis une boucle qui répète certaines instructions quelque part, ben à l'intérieur de cette boucle par exemple.
    Tu peux mettre un compteur que tu incrémentes dans ta boucle et si elle atteint un certain nombre tu rentre dans la condition if ci-dessus.
    Ou bien alors tu fais un thread qui calculera le temps écoulé et après un certain temps il rentre dans la boucle if.

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Pourquoi ne pas lancer le traitement dans un thread et attendre au plus le "timeout" ?

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // Tâche longue
    Runnable tache = new Runnable() {
      public void run() {
        long resultat = 1;
        // Infinite loop
        try {
          while (true) {
            TimeUnit.SECONDS.sleep(1);
            resultat *= 2;
          }
        } catch (InterruptedException e) {
          System.out.println("Le calcul a été annulé");
          e.printStackTrace();
        }
        System.out.println("Résultat: " + resultat);
      }
    };
     
    // Lancement et attente ...
    Thread thread = new Thread(tache);
    thread.start();
    try {
      thread.join(7000);
    } catch (InterruptedException e) {
      System.out.println("Le programme doit être arrêté");
    }
    // Timeout
    if (thread.isAlive()) {
      thread.interrupt();
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est le niveau suivant. Ce que tu proposes nécessite un traitement des interruptions. Il faut donc d'abord déterminer comment s'interrompre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    C'est l'avantage du signal "interrupt". Beaucoup de tâches y sont sensibles et c'est très facile à vérifier.

    Exemple :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class TimeoutDemo {
      public static void main(String[] args) {
        // Tâche longue
        Runnable tache = new Runnable() {
          public void run() {
            long resultat = 1;
            // Infinite loop
            try {
              while (true) {
                resultat += 1;
                if (Thread.currentThread().isInterrupted()) {
                  throw new InterruptedException("Le calcul a été annulé");
                }
              }
            } catch (InterruptedException e) {
              e.printStackTrace(System.out);
            }
            System.out.println("Résultat: " + resultat);
          }
        };
     
        // Lancement et attente ...
        Thread thread = new Thread(tache);
        thread.start();
        try {
          thread.join(200);
        } catch (InterruptedException e) {
          System.out.println("Le programme doit être arrêté");
        }
        // Timeout
        if (thread.isAlive()) {
          thread.interrupt();
        }
      }
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Discussions similaires

  1. Dossier du programme VB en cours d'exécution
    Par RimosTln dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 18/03/2011, 15h54
  2. [Système] Exécuter un programme Java en PHP
    Par sylsau dans le forum Langage
    Réponses: 10
    Dernier message: 26/04/2006, 20h02
  3. [Système] Exécuter un programme Java en PHP
    Par sylsau dans le forum Linux
    Réponses: 4
    Dernier message: 26/04/2006, 17h12
  4. [UBUNTU] Exécuter des programmes java
    Par hammag dans le forum Ubuntu
    Réponses: 6
    Dernier message: 21/04/2006, 23h50
  5. Réponses: 5
    Dernier message: 16/03/2006, 00h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo