web-dev-qa-db-fra.com

Entrée de lecture de la console Groovy

Je commence tout juste à apprendre Groovy et j'expérimente dans GroovyConsole.

Existe-t-il un moyen de lire les entrées utilisateur? J'ai essayé le code ci-dessous mais j'obtiens une erreur.

BufferedReader br = new BufferedReader (new InputStreamReader (System.in)) 
 
 Print "Input:" 
 
 Input = br.readLine () 
 
 println "Vous avez entré: $ entrée"

Voici l'erreur que je reçois:

Exception levée 
 17-Apr-2012 02:52:39 org.codehaus.groovy.runtime.StackTraceUtils sanitize 
 
 AVERTISSEMENT: Sanitizing stacktrace: 
 
 Java.io.IOException: flux fermé

Y a-t-il quelque chose que je dois importer?

Toute aide est la bienvenue.

Merci

19
James

Je suis arrivé ici en essayant de trouver le moyen le plus simple de lire les entrées utilisateur à partir de la ligne de commande ... J'ai trouvé la réponse ailleurs , je posterai ici pour documenter la `` vraie '' façon Groovy car il manque toujours:

def username = System.console().readLine 'What is your name?'
println "Hello $username"

Comme le dit Larry Battle, si vous utilisez la console groovy, assurez-vous de regarder la fenêtre `` noire '' d'arrière-plan pour la sortie et de saisir l'entrée.

[~ # ~] modifier [~ # ~]

Dans un environnement où la console n'est pas disponible, telle que l'exécution depuis votre IDE, utilisez probablement ceci à la place:

println "What is your name?"
println "Your name is ${System.in.newReader().readLine()}"
35
Renato
def readln = javax.swing.JOptionPane.&showInputDialog
def username = readln 'What is your name?'
println "Hello $username."
23
user1845761

Votre code fonctionne.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
print "Input:"
def userInput = br.readLine()
println "You entered: $userInput"

En supposant que vous êtes sur Windows, le seul problème est que l'entrée est lue à partir de la console en arrière-plan qui est lancée avant groovyconsole. enter image description here

11
Larry Battle

Vous pouvez essayer quelque chose comme ça, qui fonctionne sur la ligne de commande de tout o/s, mais aussi dans la GoovyConsole - où il apparaît une boîte de dialogue [comme indiqué dans un post précédent]:

def cons = System.console()
def yn
if (cons) {
    yn = {((cons.readLine(it + " (y/n) ")?:"n").trim()?:"n")?.charAt(0).toLowerCase().toString() }
} else {
    cons = javax.swing.JOptionPane.&showInputDialog
    yn = {((cons(it + " (y/n) ")?:"n").trim()?:"n")?.charAt(0).toLowerCase().toString() }
}
if (yn("Did you want to do something?") == 'y')
    ...do something here!...
3
Merlin

si votre System.console () est null, vous pouvez

Scanner scan = new Scanner(System.in);
String s = scan.nextLine()
2
689