Bom pessoal, estou com o seguite problema:
-
preciso receber o string do leitor de codio de barras e comparar seu valor (para que possa mandar o microcontrolador realizar uma ação)
-
duas soluções: a) ler o valor direto do dispositivo - jUSB, JSR80?? (não sei nem como utilizar)
b) ler o valor do campo de texto e apontar a leitura a pistola para lá, só que:
- isso iria ficar num loop, então como alterar o valor do campo de texto em tempo de execução(thread??)
Bem, se alguém poder me ajudar, fico muito grato!
Att,
Leiva Casemiro Oliveira
Engenharia Elétrica - UFCG
Lic. Computação - UEPB
Sr. Leiva,
Para ler o valor diretamente do dispositivo USB, quando ele está na classe HID (Human Interface Device), que é o caso de um leitor USB que simula o teclado, julgo que seja um bocadinho complicado. Portanto você precisa ler as teclas mesmo.
Normalmente é relativamente fácil - essas tais pistolas normalmente mandam um ENTER no final do código de barras a ser lido, então você precisa tratar esse ENTER.
Caro thingol,
eu já leio o valor, já comparo!.. entretanto precisaria que, dentro do loop, o valor do TextField fosse alterado
public void actionPerformed(ActionEvent e) {
System.out.println("1-"+e.getID());
if (e.getSource().equals(B_conf)) { //botao confirmar
A_test.grabFocus();
acao();
}
}
...
public void acao(){
for(int k = 1; k<=Integer.parseInt(A_Qnt_Amostra.getText()); k++){
do{
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
System.out.println(e);
}
comparar = A_test.getText(); //AKI O VALOR DO CAMPO DEVERIA SER ALTERA PELA PISTOLA..a primeira vez blz..mas depois nada..ALGUMA IDÉIA??
//deliverEvent(new Event(B_conf, Event.ACTION_EVENT, null));
}while(!compara(k));
}
}
public boolean compara(int index){
boolean achou = false;
switch (index){
case 1:
System.out.println(comparar);
if(comparar.compareTo(Choice1.getItem(Choice1.getSelectedIndex())) == 0){
System.out.println("Igual");
SERIAL_RS232<CommIdentifier> serial = new SERIAL_RS232<CommIdentifier>();
serial.inicio("0");
serial.fechar();
return true;
}else{
A_test.grabFocus();
System.out.println("Não é igual");
return false;
}
case 2:
if(comparar.compareTo(Choice2.getItem(Choice2.getSelectedIndex())) == 0){
achou = true;
A_test.setText("");
return achou;
}
default:
return false;
}
}
Notem que, ao clicar no botão seu estado fica com o de “clicado - MouseDown”, por isso não consigo desviar o foco para o campo de texto e consequentemente atualizar o valor do campo!
Obrigado pela atenção!
Att,
Leiva Casemiro Oliveira
Engenharia Elétrica - UFCG
Lic. COmputação - UEPB
Você não pode ficar em um loop que é iniciado por um botão. Se você fizer isso, como você fez, então toda a parte gráfica é congelada, e mesmo o JTextField fica congelado.
Se você precisa investigar o valor de alguma coisa em um loop, ponha esse loop em uma thread.
Thingol meu querido,
Valeu pela ajuda…os fóruns servem para ajudar, que não necessariamente tem de ser dando a resposta de cara, mas só em informar o que não pode ajuda bastante. Fiz o seguinte:
[code] public void actionPerformed(ActionEvent e) {
System.out.println(“1-”+e.getID());
if (e.getSource().equals(B_conf)) { //botao confirmar
A_test.requestFocus();
thread_leitura = new Thread(this);
thread_leitura.start();
}
}
public void run() {
try{
for(int k =1; k<=Integer.parseInt(A_Qnt_Amostra.getText()); k++){
do{
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
System.out.println(e);
}
A_test.requestFocus();
comparar = A_test.getText();
}while(!compara(k));
}
thread_leitura.stop();
}catch(Exception e){
System.out.print(e);
}
}[/code]
…
Qualquer coisa tamu as ordem…
Abraço!
Leiva Casemir Oliveira
Engenharia Elétrica - UFCG
Lic. Computação - UEPB
Nao seria mais facil utilizar o metodo KeyReleased do .tx e colocar todo o seu codigo lah??? aÊ sempre q o leitor de codigo de barras jogar um valor no .tx vc pode comparar e fazer algo depedendo da situação!!
Caro Jameson_itu,
sinceramente não sei!..nunca usei o KeyReleased…o que seria .tx (um arquivo .txt???)
Se puder me fornecer mais sobre o assunto…é válido…ainda mais se for uma solução melhor1
Abraço.
Leiva Casemiro Oliveira
Engenharia Elétrica - UFCG
LIc. COmputação - UEPB
na verdade esse txt q eu me refiro seria um Jtextfield é q por força do habito sempre nomeio meus Jtextfield com txtNome txtCodigo!!rs
Utilizei este evento do Jtextfield faz pouco tempo em um projeto segue aÊ:
private void txtCodigoKeyReleased(java.awt.event.KeyEvent evt) {
DefaultTableModel modTblProdutos = (DefaultTableModel) TblProdutos.getModel();
try{
Integer cod = Integer.parseInt(txtCodigo.getText());
produto = null;
produto = produtoDAO.findProdutos(cod);
if (produto != null) {
QTD = 0;
Integer Cod = 0;
Cod = produto.getCodBarrasProd();
txtNome.setText(produto.getNome());
Integer qtd = 0;
for (int i = 0; i < modTblProdutos.getRowCount(); i++) {
String codTable = (String) modTblProdutos.getValueAt(i, 0);
if (codTable.equals(txtCodigo.getText())) {
Integer qtdTable = Integer.parseInt(modTblProdutos.getValueAt(i, 3).toString()) + Integer.parseInt(txtQuantidade.getText());
modTblProdutos.removeRow(i);
String Linha[] = {Cod.toString(), produto.getNome(),
produto.getDescricao(), qtdTable.toString(), produto.getEstoqueMinimo().toString(), produto.getEstoqueIdeal().toString()
};
modTblProdutos.addRow(Linha);
break;
} else {
Integer qtdrow = (modTblProdutos.getRowCount() - 1);
if (i == qtdrow) {
String Linha[] = {Cod.toString(), produto.getNome(),
produto.getDescricao(), txtQuantidade.getText(), produto.getEstoqueMinimo().toString(), produto.getEstoqueIdeal().toString()
};
modTblProdutos.addRow(Linha);
break;
}
}
}
if (modTblProdutos.getRowCount() == 0) {
String Linha[] = {Cod.toString(), produto.getNome(),
produto.getDescricao(), txtQuantidade.getText(), produto.getEstoqueMinimo().toString(), produto.getEstoqueIdeal().toString()
};
modTblProdutos.addRow(Linha);
}
}
limpaControles();
}catch(Exception ex){
limpaControles();
txtCodigo.requestFocus();
}
btnSalvar.setEnabled(true);
}
vê c consegue entender!! na verdade este envento do Jtextfield faz com que sempre q é carregado um valor no Jtextfield ele realiza uma ação …