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 :

Besoin d'une idée pour stopper un traitement


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut Besoin d'une idée pour stopper un traitement
    Bonjour

    je galère pas mal pour stopper un traitement dans mon appli Java.

    J'ai un objet Java (pour info : un interpréteur BeanShell) qui exécute un traitement long que je voudrais stopper (l'exécution de la méthode source(...) peut être plus ou moins long).

    Je pensais lancer le traitement dans une Thread et tuer cette Thread depuis une autre mais ça ne peux pas marcher car "maThread.interrupt()" n'arrête pas dans tous les cas une Thread et les autres méthodes du style "stop" "destroy"... ne sont pas utilisables.

    Et donc, même depuis une autre Thread, je n'arrive pas à stopper cette exécution, même si j'essaie de faire planter mon interpéteur par "monInterpeteur.source(<des paramètres au pif pour que ça plante !>) en parallèle.

    J'ai tenté de lancer un nouveau processus avec une nouvelle JVM pour killer directement un processus mais le traitement doit partager des objets avec mon appli (partage d'objets entre 2 JVM). J'ai donc utilisé RMI mais la mise en oeuvre de RMI est trop lourde dans mon cas (trop de méthodes appelées, trop d'interfaces... objets statiques pas sérializable... trop gênant pour le futur de l'appli).

    Je ne sais plus quoi faire .

    Si vous avez une idée, merci d'avance.

  2. #2
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Une idee comme ca avec les threads :

    dans ton objet BeanShell tu aurais un indicateur pour savoir si tu dois continuer ou non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    private boolean continuer;
     
    public boolean getContinuer(){ 
    return continuer;}
     
    public void setContinuer(boolean continuer){ 
    this.continuer=continuer;}
     
    //un traitement dans ce style dans ta fonction
     
    public void fonction(){
     
    if (!continuer)
    return;
    }
    ensuite, depuis une autre classe tu ferais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonBeanShell.setContinuer(false);

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Merci pour votre aide, mais le problème est que je ne peux accéder au code de mon objet BeanShell.

    J'appelle un traitement long sur cet objet, qui ne peut être stoppé par le biais de cet objet depuis un autre Thread.

    Je ne peux pas donc faire ce que vous dites.

    Merci quand même.

  4. #4
    Invité
    Invité(e)
    Par défaut
    salut,
    essaye d'insérer du code c ou c++ avec jni.
    tu peut comme ça faire communiquer les processus par les signaux (je ne sais pas si ça existe en java ou non). la solution consiste à envoyer au processus un signal qui va le tuer. cherche du côté gestion des processus en c.

  5. #5
    Membre éclairé Avatar de fdubks
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Par défaut
    Salut,

    Peut etre peux tu encapsuler ou deriver ton objet et ainsi utiliser le thread comme le propose willoi ?

  6. #6
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Tu peux peut être essayer de passer par un ExecutorService (ou ThreadPoolExecutor).

    Dedans tu as :
    • une méthode awaitTermination qui gère un timeOut
    • une méthode remove qui vire la tache à exécuter (par contre je ne sais pas ce que ça donne si elle est commencée)


    en combinant ça avec la méthode interrupt tu devrais pouvoir t'en sortir je pense

    En espérant que ça puisse t'aider ...

Discussions similaires

  1. Besoin d'une idée pour un mouvement souris
    Par Naphta50 dans le forum Qt
    Réponses: 0
    Dernier message: 28/12/2013, 00h27
  2. [XL-2007] besoin d'une idée, d'une méthode pour réduire une procédure trop longue
    Par dmoluc dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/07/2012, 18h56
  3. Besoin d'une idée pour finir ma condition IF
    Par pcsystemd dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 02/05/2008, 16h18
  4. Besoin d'une idée pour formater mes données
    Par guidav dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 04/04/2007, 19h49
  5. Besoin d'une précision pour try/catch, svp
    Par hallek60 dans le forum C++
    Réponses: 9
    Dernier message: 05/01/2006, 21h15

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