Help me, entrada de dados em modo texto

10 respostas
N

Ola amigos,
Sou novo aqui, e conheço muito pouco sobre java, peguei um projeto andando, que utiliza um terminal de coletor de dados que roda o codigo java e estou dando continuidade ao desenvolvimento.

A interface que é mostrada para o usuario é totalmente modo texto, ou seja, nao existe interface grafica, como janelas, botoes, etc. Sao exibidos menus em que aparecem a opcoes enumeradas por uma lista, e o usuario tem que usar o teclado para entrar com os dados e enviar a resposta para ação a ser tomada.

O meu problema é o seguinte:
Quando o usuario digita uma opcao, por exemplo, tem que teclar <1> e depois <ENTER> para escolher a opcao: rastreio produto.
Queria saber como eu faço para que no momento em que eu digito a tecla <1> a opcao seja escolhida, sem a necessidade de teclar <ENTER>?

Atualmente estou usando o metodo readLine() da classe BufferedReader:
Um exemplo:

import java.io.*;

public class index {

public index() throws Exception {

}

public static void main(String args[]) throws Exception {

inicio();

}
public static void inicio() throws Exception {

//Variavéis para leitura de linha

InputStreamReader isr;

BufferedReader br;

isr = new InputStreamReader(System.in);

br = new BufferedReader(isr);
String resposta = "";
String mensagem = "";
mensagem = "Menu Principal \n" +
    "[1]Rastreio de produto \n" +
    "[2]Rastreio de estoque \n" +
    "[3]Rastreio de endereco \n" +
    "[4]Sair \n " +
    "\n" +
    "\n" +
    "Opcao: ";
do {
  System.out.print(mensagem);
  resposta = br.readLine();
}
while (  (!resposta.toUpperCase().trim().equals("1"))
       &&(!resposta.toUpperCase().trim().equals("2"))
       &&(!resposta.toUpperCase().trim().equals("3"))
       &&(!resposta.toUpperCase().trim().equals("4"))
      );

System.out.println("Resposta:" +
                   resposta);
System.out.println("FIM");

}
}

PS.
O coletor de dados é esse :
LRT 3800da Symbol Technologies,
Series 3800Portable Terminal

Ele esta rodando em um Servidor Unix.
Dá pra simular o acesso via Telnet.

Se alguem puder ajudar fico muito grato.
Valeu!

10 Respostas

eltonk

Nunca ouvi falar de algum modo em que você, pressionando uma tecla do teclado já execute algo… =(

Se vc descobrir como faz isso, poste aqui pro pessoal ver! =)
Achei interessante essa sua dúvida, vou até dar uma pesquisada e se eu descobrir algo posto aqui tb…

[]`s

M

seria algo equivalente a getch() em C…

F

Cara isso parece sitema feito em Natural…

R

Daí guri,

Não sei se to falando besteira, mas não seria possível tu colocares um “action listener” pra ele ficar esperando uma tecla ser pressionada ?

Não sei como programar uma, mas sei mais ou menos o que ela deve fazer. Talvez isso de uma luz pro pessoal que conhece :wink:

[]s

F

“renatopb”:
Daí guri,

Não sei se to falando besteira, mas não seria possível tu colocares um “action listener” pra ele ficar esperando uma tecla ser pressionada ?

Não sei como programar uma, mas sei mais ou menos o que ela deve fazer. Talvez isso de uma luz pro pessoal que conhece :wink:

[]s

soh da pra usar o actionListener, keyListener, mouseListener, etc… em uma janela…

R

Daí,

Pena que não dá pra usar o listener, mas como eu fiz antes, vou botar as vozes na minha cabeça pra falar, não dá pra fazer um método que fique vendo o tamanho do bufferedReader e assim que o tamanho mudar de 0, ele pegue o valor ?

Não dá de por um trigger ou algo do tipo ?

Sei lá, não consigo aceitar isso :stuck_out_tongue:

[]s

F

o q pode ser feito, eh “simular” a janela do DOS, ou seja, abre uma janela q parece com a do dos, e dai sim coloca um keyListener… eh meio estranho mas funciona…

eltonk

que baianagem! ehehehehe

Tipo… eu estava fazendo alguns testes com valores em bytes, char… tipo de dados que aceitam só um caracter… não consegui ainda… mas se me derem mais um tempo eu acho que consigo hehehehe

A coisa tah andando na base da tentativa e erro :stuck_out_tongue_winking_eye:

[] 's

N

Para o colega que sugeriu utilizar “action listener” eu acho que não daria certo pois, não sei se estou dizendo algo errado, o ActionListener faz parte do pacote java.awt.event que trata de eventos gerados por componentes GUI de interface gráfica com usuário.
Bom, a não ser que existisse alguma maneira de implementar um Action Listener sem um componente grafico, algo que acho dificil de fazer…

Outro colega perguntou se seria algo equivalente ao getch() do C, bom é exatamente isso mesmo, que eu queria fazer…

Dei uma pesquisada na net e encontrei isso:

FROM: John BrewerDATE: 05/21/1999 19:22:42SUBJECT: RE: getch() … in java At 08:39 AM 5/21/99 , Daniel Ignat wrote:

how can i use sinonim for getch() in java

Sorry, Java doesn`t have getch(). Technically, neither does C or C++. The
function getch() is a DOS-specific extension to the C stdio library. For
C/C++ there is often (but not always) a platform specific way to get RAW data.

In Java, you`re pretty much hosed. Consider using an AWT Dialog containing
a TextField with echoChar set to something like “*”.

For a summary of other common misconceptions about Java I/O, see:
http://metalab.unc.edu/javafaq/slides/toptenmyths/

For a summary of common misconceptions about C I/O, see section 19 of:
http://www.cis.ohio-state.edu/hypertext/faq/usenet/C-faq/faq/faq.html

John Brewer
Jera Design

Bom ao que parece, pelo que eu entendi, não existe algo equivalente em Java, por uma questão de portabilidade entre os diferentes SO’s, algo assim poderia funcionar em DOS mas em Unix não e por aí vai.

Encontrei isso tambem, no site da sun:

Forum Home > New To Java Technology
Topic: i hate java:

http://forum.java.sun.com/thread.jsp?forum=54&thread=445190&message=2012522

De acordo com o que foi dito nesse tópico da sun, uma sugestão seria escrever um programa em java que se comunicasse com um executável feito em c que fizesse as opeações desejadas, já que essas operações são especificas de um determinado sitema operacional.
Vou ver se consigo fazer esse negócio funcionar dessa forma, se der certo eu coloco aqui no forum.

Se alguem estiver a fim de fazer o mesmo ou tentar outra coisa, melhor ainda…

Valeu.

eltonk

Quanta complicação…

Vamos mandar uma carta ao comite JAVA para eles adicionarem essa funcionalidade na próxima versão! ehehheeh

Nos momentos vagos, vou continuando os testes por aqui… eu não me conformo que não existe isso! =(

Abraços…

Criado 22 de novembro de 2003
Ultima resposta 1 de dez. de 2003
Respostas 10
Participantes 6