Supposons que j'ai un code dans lequel il demande à l'utilisateur de donner une entrée, quelque chose comme ceci: mais je veux donner à l'utilisateur une limite de 60 secondes, puis jetez un Exception (dans ce cas, je pense que son timeoutException code>). Comment puis-je faire ça? P> p>
3 Réponses :
import java.util.Timer; import java.util.TimerTask; import java.io.*; public class test { private String str = ""; TimerTask task = new TimerTask() { public void run() { if( str.equals("") ) { System.out.println( "you input nothing. exit..." ); System.exit( 0 ); } } }; public void getInput() throws Exception { Timer timer = new Timer(); timer.schedule( task, 10*1000 ); System.out.println( "Input a string within 10 seconds: " ); BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) ); str = in.readLine(); timer.cancel(); System.out.println( "you have entered: "+ str ); } public static void main( String[] args ) { try { (new test()).getInput(); } catch( Exception e ) { System.out.println( e ); } System.out.println( "main exit..." ); } }
Y a-t-il un autre moyen plus simple? Parce que je n'ai pas de classes de minuterie et d'horlecture dans mon paquet Java.Util
Démarrer le thread, utilisez simplement pendant votre temps pendant votre temps et après l'intervalle d'utilisation du fil.destroy ();
J'ai quelque chose à demander u..lets dire que j'ai écrit cela - thread t = nouveau thread (); t.start (); // j'ai commencé un fil do {// ma logique} alors que (condition); t.destroy (); // J'ai détruit le fil. Mais je ne sais pas pourquoi. Mon squelette de code est-il correct? Et quelle est la condition que je dois mettre à l'intérieur ()? Pouvez-vous préciser tous mes doutes?
Dans votre cas, vous n'avez pas besoin d'utiliser pendant que vous souhaitez quitter si l'utilisateur entrait quelque chose, donc si l'utilisateur n'entraîne pas quelque chose, vous devez attendre la durée spécifiée afin que votre login soit donc juste enlever tout en supprimant la boucle
Je suppose que je ne vous ai pas dit correctement. Je veux attendre que l'utilisateur entrait une certaine valeur. Mais je veux attendre seulement quelques secondes. Après cette heure spécifiée, je veux montrer une erreur et sortir.Aso maintenant mon problème est, le sysout et le sysnread - les deux entrent à l'intérieur d'une boucle. Il n'est donc pas possible pour moi de continuer avec la prochaine itération? J'ai mis à jour mon code ..
Quelle est la déclaration de tâche?
J'utilise joda-time pour ce type de choses:
Maven: p> Lorsque vous invitez à saisir, définissez une variable localDaTime: p> if (timeOut.isBefore(new LocalDateTime())) {
//throw your exception if this case happens
}
Y a-t-il une autre manière plus simple? Parce que je n'utilise pas cela maven dans mon projet.
Vous pouvez utiliser Joda-Time sans Maven Aswell: P
Que diriez-vous de quelque chose aussi simple que ceci:
Scanner reader = new Scanner(System.in); System.out.println("Enter a number: "); long limit = 5000L; long startTime = System.currentTimeMillis(); Long l = reader.nextLong(); if ((startTime + limit) < System.currentTimeMillis()) System.out.println("Sorry, your answer is too late"); else System.out.println("Your answer is on time");
Cela attendra que vous pourrez fournir une entrée.
Dupliquer: Stackoverflow.com/Questtions/804951/...