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

Android Discussion :

Thread.sleep dans for()


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2014
    Messages : 39
    Par défaut Thread.sleep dans for()
    Bonjour,

    J'espere être a la bonne place et j'espere trouver un géni qui saura m'expliquer pourquoi cela ne fonctionne pas et quoi faire pour que ca marche.

    J'essaye de faire des pauses Thread.sleep()dans une boucle (for) pour que mon ScrollView scroll tout seul... donc faire un AutoScroll ou texte auto-défilant.

    Cela fait maintenant 2 jours que je suis bloqué, j'ai googlé presque tout ce qui est possible a ce sujet... J'ai beaucoup lu sur les Threads.sleep() mais rien n'aboutit.

    Voici mon code, je l'ai réduit au plus simple. J'utilise API 7 comme minimum SDK.

    Mon MainActivity en java, crée avec Eclipse, que j'ai nommé testsleep :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    package com.example.testsleep;
     
    import com.example.testsleep.R.id;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ScrollView;
    import android.widget.TextView;
    import android.app.Activity;
     
    public class MainActivity extends Activity {
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.activity_main);
     
    	Button Button_AutoScroll = (Button)findViewById(id.Button_AutoScroll);
    	Button_AutoScroll.setOnClickListener(new OnClickListener() {
    	    @Override
    	    public void onClick(View v) {
     
    	        TextView Text_Scrolable = (TextView) findViewById(id.Text_Scrollable);				
    	        ScrollView Scroll_Window = (ScrollView)findViewById(id.Scroll_Window);
     
    	       for (int ScrollPos = 0; ScrollPos < Text_Scrolable.getHeight();++ScrollPos)
                    {
    	            try {Thread.sleep(10000);}     ////ici ca plante 
    	            catch (InterruptedException e) {return;}
     
    		    Scroll_Window.smoothScrollTo(0, ScrollPos);										
    	        }
                }
            });
        }
    }
    Et mon fichier XML activity_main

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/Layout_MainLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
     
        <ScrollView 
            android:id="@+id/Scroll_Window"
            android:layout_width="300dp"
            android:layout_height="175dp"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" >
     
                    <TextView
                    android:id="@+id/Text_Scrollable"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:text="blablablblablalblablalblabllablalblablalbla
                    lbalbalblbllablalblablalblablablablalblablalbalblablalbla
                    blablablalbalblablablalbalblablablalblablalblabllbalalbal
                    lblablalbbalblablablblblablablablalbbalblablbalblblalbbla
                    blablablblbalbablbalalbalbblablbalbblalblablalblalalbblbl
                    lblbalblablalblablablalblablablalbalblablablalblablablblb
                    lblablalbalblablablablablblablablalablalblablablalblablba
                    lblabllablalblablalblablalblalblablalblalblblablalblalblb
                    lbalbalblbllablalblablalblablablablalblablalbalblablalbla
                    blablablalbalblablablalbalblablablalblablalblabllbalalbal
                    lblablalbbalblablablblblablablablalbbalblablbalblblalbbla
                    blablablblbalbablbalalbalbblablbalbblalblablalblalalbblbl
                    lblbalblablalblablablalblablablalbalblablablalblablablblb
                    lblablalbalblablablablablblablablalablalblablablalblablba
                    lblabllablalblablalblablalblalblablalblalblblablalblalblb
                    lbalbalblbllablalblablalblablablablalblablalbalblablalbla
                    blablablalbalblablablalbalblablablalblablalblabllbalalbal
                    lblablalbbalblablablblblablablablalbbalblablbalblblalbbla
                    blablablblbalbablbalalbalbblablbalbblalblablalblalalbblbl
                    lblbalblablalblablablalblablablalbalblablablalblablablblb
                    lblablalbalblablablablablblablablalablalblablablalblablba
                    lblabllablalblablalblablalblalblablalblalblblablalblalbl"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:textColor="#673F18" />
     
        </ScrollView>
     
        <Button
            android:id="@+id/Button_AutoScroll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:text="AutoScroll" />
     
    </RelativeLayout>
    Quand je met la portion[try {Thread.sleep(10000);} catch (InterruptedException e {return;}] dans la boucle for ca plante. Comme si il compilait le Thread.sleep() un par dessus l'autre sans l'executer et faire une pause comme prévu et sature la mémoire. Pourtant c'est ce que je vois partout sur le net pour faire une pause dans un for.

    Quand je mets ces 2 lignes en dehors de la boucle for... avant ou apres... il fait une pause de 10 sec avant d'effectuer la boucle for d'un coup. Mais rien a faire dans la boucle.

    Est-ce qu'il y a de quoi que j'ai mal compris a propos des Threads...

    merci a'avance pour votre aide...

  2. #2
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    Salut,

    As-tu essayé de commenter la boucle ?

    Break a la place de return ?

    Tu as le logcat ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2014
    Messages : 39
    Par défaut
    Merci
    J'ai essayer break aulieu de return, cela me donne un message d'erreur encore mais si je fais attendre aulieu de forcer le redemarage sa debogue... mais il ne fait toujours pas de pause entre chaque boucle.

    Que veut tu dire pas commenter la boucle...
    Et oui j'ai le logCat mais c'est encore du chinois pour moi.

    Autre suggestion, le code est toute la pour l'essayer vite fait... j'ai même mis le XML pour que ca ce test vite.

    p.s. Ca fait a peine 2 sem que j'apprend le java. J'ai une tres forte base en VB, j'ai fait quelques petits jeux, surtout des jeux de table mais la je veux faire des app pour Android. Je sais que je ne suis pas au bout de mes peines mais j'apprend tres vite. SVP aidez moi avec ce mystere de comment ralentir la boucle for.

  4. #4
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    Essaie de faire executer ton sleep hors de la boucle. Commente la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (int ScrollPos = 0; ScrollPos < Text_Scrolable.getHeight();++ScrollPos)
                    {
    et pour vérifier que l'erreur soit encore la

    Affiche le logcat pour qu'on puisse vérifier les causes de l'erreur.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2014
    Messages : 39
    Par défaut
    Ca fontionne tres bien hors de la boucle.... aucune erreur.... le programme prend une pause de 10 sec et execute la boucle d'un seul coup, donc aulieu de dessendre tranquillement il va directement a la fin... comme Home/End

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try {Thread.sleep(10000);} 
    catch (InterruptedException e) {break;}
     
    for (int ScrollPos = 0; ScrollPos < Text_Scrolable.getHeight();++ScrollPos){
     
    	//try {Thread.sleep(10000);} 
    	//catch (InterruptedException e) {break;}
     
    	Scroll_Window.smoothScrollTo(0, ScrollPos);										
    }

    je vois dans le logCat

    WindowManager WIN DEATH: Windows{49e20888 com.exemple.....
    eep.MainActivity paused=false}

    Quand je le met dans la boucle voici ce que le logCat renvoie
    threadid=7: reacting to signal 3
    Wrote stack trace to !/data/anr/traces.txt'

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2014
    Messages : 39
    Par défaut
    Ok désolé du délais j'ai explorer un peu le logcat...

    J'ai effacer le logcat et afficher seulement les erreurs

    ... j'ai ces 2 erreurs au chargement du programme que je mette le code Tread.sleep() ou non.....mmmmm

    E/AndroidRuntime(775): ERROR: thread attach failed
    E/AndroidRuntime(786): ERROR: thread attach failed


    ...Quand je click sur mon bouton qui active la boucle for avec le sleep a l'intérieur il me renvoi ceci comme erreur en cliquant sur le bouton forcer le redémarage

    E/JavaBinder(51): !!! FAILED BINDER TRANSACTION !!!
    E/gralloc(51): [unregister] handle 0x507050 still locked (state=40000001)

    est-ce que ca aide???
    sinon j'ai pas compris ce que tu voulais dire commenter la ligne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Thread sleep dans une boucle
    Par Sharcoux dans le forum Général Java
    Réponses: 7
    Dernier message: 17/03/2013, 19h29
  2. ce que fait sleep dans un thread
    Par ikuzar dans le forum Débuter
    Réponses: 2
    Dernier message: 26/08/2009, 09h00
  3. [Thread] PB Thread.sleep(1000) marche pas
    Par kliel dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 03/12/2004, 13h47
  4. [Thread]sleep()
    Par jokoss dans le forum Concurrence et multi-thread
    Réponses: 15
    Dernier message: 03/07/2004, 14h33
  5. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 08h15

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