Partage
  • Partager sur Facebook
  • Partager sur Twitter

Interruption du Scanner(System in).next[*]()

    3 décembre 2018 à 20:24:07

    Bonjour openclassroms :)

    Je suis depuis plusieurs semaines face à CE problème : Interrompre un InputStream ici ce sera le Scanner(System in).nextLine() je connais que celui là XD.

    Ce que je cherche à faire c'est d'interrompre cela après 5 seconde par exemple et de passer a la suite du code mais rien sur internet de ce que j'ai pu comprendre a pu m'aider jusque ici. Je suis donc parti sur l'idée du thread qui s'interrompt mais cela n'a aboutit a rien.

    Je vous met ci dessous un code qui illustre ce que je veux faire.

    //MON MAIN 
    public class Mainer {
    	private volatile static TestThread A ;
    	public static void main(String[] args) {
    		
    		System.out.println("Bonjour");
    		A = new TestThread();
    		A.start();
    		try {
    			Thread.sleep(5000);
    		} catch (InterruptedException e) {
    			
    			e.printStackTrace();
    		}
    		
    		System.out.println("au revoir");
    		
    		A.arret();
    		A=null;
    	}
    //LE THREAD
    import java.util.Scanner;
    
    public class TestThread extends Thread {
    	public static Scanner sc =new Scanner(System.in);
    	
    	public TestThread() {
    		
    	}
    	  public void run(){
    		 
    		  sc.nextLine();
    		   
    	  }
    	  public void arret() {
    		  
    		  Thread.currentThread().interrupt();
    	  }
    }

    Si quelqu'un a une solution, une question, une alternative, je suis preneur.:ange:

    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2018 à 20:40:54

      Qu'entends-tu pars "Interrompre un InputStream" car si tu parles de fermer l'input, il existe Scanner.close();
      • Partager sur Facebook
      • Partager sur Twitter
      Merci, Cordialement.
        4 décembre 2018 à 16:26:06

        Emilien G. a écrit:

        Qu'entends-tu pars "Interrompre un InputStream" car si tu parles de fermer l'input, il existe Scanner.close();


        Ce qu'il veut, c'est que lors ce qu'il y a un truc du genre "sc.nextInt()", qu'on ne laisse que 5 secondes à l'utilisateur pour sa saisie, et que donc une fois ce temps passer, le reste du code déroule. Et non pas rester en attente pendant un temps infini.
        • Partager sur Facebook
        • Partager sur Twitter
          4 décembre 2018 à 19:26:57

          public static void main(String[] args) throws  IOException, InterruptedException
          {
          	boolean called = false; // ce boolean va permettre de savoir si la personne à entré quelques-chose
          	long start = System.currentTimeMillis(); // va permettre la vérification du temps
          	BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // va permettre la lecture
          	
          	System.out.print("Entrer un valeur: ");
          	while(System.currentTimeMillis() < start + 5000L) // vérification du temps de 5 secs
          	{
          		if(in.ready()) // cette method permet de savoir si la personne à entré quelques-chose
          		{
          			System.out.println("Très bien, tu as choisis "+in.readLine()); // si oui, on lit la ligne (tu peux faire une vérification pour si c'est bien un chiffre)
          			called = true; // on dis que l’événement à bien été appelé
          			break; // on casse le 'while'
          		}
          	}
          	if(!called) System.out.println("\nTrop tard, tu as mis trop de temps pour réponde !"); // si l'événement n'as pas été appelé alors..
          	in.close();
          }
          • Partager sur Facebook
          • Partager sur Twitter
          Merci, Cordialement.

          Interruption du Scanner(System in).next[*]()

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown