2008/10/7 Antonio Ognio <[EMAIL PROTECTED]>

> El día 7 de octubre de 2008 10:41, Oscar Gosdinski
> <[EMAIL PROTECTED]> escribió:
>
> > Lo que sucede es que al leer de System.in, estás leyendo el stdin del
> > SO, por tanto el usuario tiene que escribir en stdin lo que se
> > ingresará en el programa. Al escribir el nombre y el retorno de carro
> > esto será mostrado en la terminal a menos que bloquees la terminal
> > para que no se muestre lo que estás ingresando (como lo hace por
> > ejemplo el programa passwd). Ojo que esto último es un comportamiento
> > del SO _no_ de Java, por lo que no lo puedes evitar programando.
>
> Efectivamente. Conozco Java pero no es mi especialidad y me acabo de
> sorprender de comprobar buscando en Google y preguntando en canales de
> Java especializados que simplemente NO es posible leer un caracter en
> la consola sin imprimirloen pantalla utilizando codigo 100% Java y que
> además sea portable :(
>
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4050435
>
> Al parecer, es posible hacer este "truco" utilizando clases que para
> algo tan simple son bastante complejas como jcurses o jline que son
> los equivalentes en Java a curses y GNU readline respectivamente. Sin
> embargo, ambas clases se apoyan en llamadas a programas nativos de
> Windows o UNIX porque el propio estandar de Java no permite este tipo
> de comportamiento.
>

Es el problema de buffering. Muchas de las consolas hacen input buffering
antes de pasar la info al programa.

Por eso, aún con java.io.Console en Java 6, se tiene el problema que
mencionas.

Fíjate un bug actualizado:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6351276


> Entonces la respuesta correcta a tu sobrino es que tu no estabas mal,
> Java esta mal! :) Esto si es sencillo de hacer en otros lenguajes como
> C por ejemplo, aunque si nos vamos a ir por el lado de hacerlo con
> codigo en C realmente portable parece que la cosa se complica de nuevo
> porque getch() no esta disponible en tooodas las plataformas, al final
> nuevamente hay que recurrir a curses y librerias parecidas.
>

Habría que ver si la definición o descripción inicial esta correcta, puesto
que la tarea podría haber sido (quizás más razonablemente):

(1) Pedir datos al usuario (uno a la vez)
(2) Al final, imprimirlos formateados en una sola línea.

Una opción, podría usa el método Console.readPassword(), pero no estoy
seguro si cumpliría con las condiciones iniciales, que son mas estrictas que
las que menciono arriba.


> Bien curioso el tema.. Me encantaria que alguien me corrija pero me
> temo que no va a suceder :(
>
> Antonio
> _______________________________________________
> Lista de correo Linux-plug
> Temática: Discusión general sobre Linux
> Peruvian Linux User Group (http://www.linux.org.pe)
>
> Participa suscribiéndote y escribiendo a:  [email protected]
> Para darte de alta, de baja  o hacer ajustes a tu suscripción visita:
> http://listas.linux.org.pe/mailman/listinfo/linux-plug
>
> IMPORTANTE: Reglas y recomendaciones
> http://www.linux.org.pe/listas/reglas.php
> http://www.linux.org.pe/listas/comportamiento.php
> http://www.linux.org.pe/listas/recomendaciones.php
>



-- 
Jesus M. Castagnetto <[EMAIL PROTECTED]>
Web: http://www.castagnetto.com/
_______________________________________________
Lista de correo Linux-plug
Temática: Discusión general sobre Linux
Peruvian Linux User Group (http://www.linux.org.pe)

Participa suscribiéndote y escribiendo a:  [email protected]
Para darte de alta, de baja  o hacer ajustes a tu suscripción visita:
http://listas.linux.org.pe/mailman/listinfo/linux-plug

IMPORTANTE: Reglas y recomendaciones
http://www.linux.org.pe/listas/reglas.php
http://www.linux.org.pe/listas/comportamiento.php
http://www.linux.org.pe/listas/recomendaciones.php

Responder a