Pra quê javax.comm?

Olá pessoal do GUj.
Eu sei que posso estar falando besteira, mas o negócio é o seguinte:
Trabalho com linux e tinha que passar um determinado número de caracteres para uma impressora térmica para ela poder imprimir etiquetas. Ai tentei usar javax.comm juntamente com o RXTX e não conseguia mandar. O programa mandava metade dos comandos (em forma de caractere) para a impressora e parava com a seguinte mensagem:
fault segmentation
Daí comentariei todo o código e criei outro assim:

public boolean abreImprimeFechaParalela(char[] codImpressao){
try{
FileOutputStream fr = new FileOutputStream("/dev/lp0");
for(int i = 0; i < codImpressao.length; i++){
System.out.print(codImpressao[i]);
fr.write(codImpressao[i]);
}
fr.flush();
fr.close();
return true;
}
catch(IOException ioe){
JOptionPane.showMessageDialog(null, "Problemas: " + ioe.getMessage());
ioe.printStackTrace();
}
return false;
}

e imprimi a etiqueta normalmente.
Fica ai a minha pergunta: para que usar esse pacote? Será que é há casos em que não tem jeito e deve - se usar javax.comm?
Mais uma vez desculpe se falei alguma besteira.

Olá.

Não sou especialista em javax.comm, mas como estou estudando o assunto agora, acho que posso te dar uma luz.

O javax.comm define uma interface, do mesmo modo que o JDBC e o JTAPI. Ou seja, temos apenas uma especificação.

Assim, cada fabricante deve implementar seus drivers nativos seguindo a interface que deseja implementar (JDC, por exemplo), para que a programação funcione.

Por exemplo, suponha que eu queira acessar o banco de dados xpto, que não possue driver JDBC. O programa simplismente não vai funcionar, pois sem o driver “real”, implementado por alguém (o fabricante do nosso banco de dados fictício), só temos a “casca” do JDBC.

Pelo que eu descobri esta semana, uma implantação da javax.comm para o linux encontra-se em:
http://www.interstice.com/kevinh/linuxcomm.html, que possui o RXTX que tu usaste.

O teu problema pode ser devido a 2 coisas:

  1. alguma configuração errada ou faltando;
  2. algum problema na implementação do RXTX (não sei o quanto esta implementação é boa, pois ainda não tentei utilizá-la)

Quando tu usas

FileOutputStream fr = new FileOutputStream("/dev/lp0");

na realidade a vm vai interagir com os drivers nativos do linux, que são os responsáveis por realizar a impressão.

Para que usar então uma implementação do javax.comm?

Para tu teres um controle maior sobre as portas serias / paralelas sem teres que sair do java e utilizares o C/C++.

[]s,

1 curtida

pô cara, valeu. Ótima explicação!!! :wink: