Saudações…
estou implementando a comunicação serial no java usando a JavaComm. Muito bem, fiz um trecho de código só pra me listar as portas disponíveis. Quando executo o programa pela IDE do NetBeans não aparece as portas. Porém, se executo pelo prompt, funciona normalmente.
Alguém o porque disso?
JavaComm[Resolvido]
8 Respostas
Se possível mostre o código que você fez, assim a gente pode avaliar melhor 
Outra coisa, o javacomm trabalha com um arquivo onde você informar as portas seriais existentes no computador, pode ser que pelo console o programa esteja acessando um arquivo com os nomes das portas listados de forma correta enquanto no netbeans o programa esteja acessando outro arquivo que não tenha sido configurado corretamente. Em todo caso posta o código ai pra gente ver, que ai as coisas fica mais fáceis.
ok amigo, segue o trecho abaixo:
public class SerialCom {
private String[] portas;
private Enumeration listaDePortas;
public SerialCom() {
listaDePortas = CommPortIdentifier.getPortIdentifiers();
}
public void ListarPortas(){
int i = 0;
portas = new String[10];
while (listaDePortas.hasMoreElements()) {
CommPortIdentifier ips = (CommPortIdentifier)listaDePortas.nextElement();
portas[i] = ips.getName();
i++;
}
}
public void ImprimePortas(){
for (int i = 0; i < portas.length; i++) {
if (portas[i] != null) {
System.out.print(portas[i] + " ");
}
}
System.out.println("");
}
}
Geralmente isso ocorre quando a dll do javax.comm não é encontrada.
Outro problema (que não deve ter a ver com seu caso, mas vc provavelmente vai esbarrar) é que essa lista de portas só é obtida durante a inicialização. Se uma nova porta surgir no sistema, ela nunca será detectada. Antes que você tenha esse problema, já criei um método que faz o refresh das portas. Ele usa reflection para chamar um método privado, portanto, seu funcionamento pode parar de existir entre versões diferentes do javax.comm. Mas usei por vários anos e nunca tive problemas:
/**
* Refreshes the port list, redetect all system ports. It's desirable that
* all <tt>CommPorts</tt> objects are closed before calling
* refreshing.
*/
public static void refreshComPorts() {
try { // try reloading the driver
Field masterIdList_Field = CommPortIdentifier.class.getDeclaredField("masterIdList");
masterIdList_Field.setAccessible(true);
masterIdList_Field.set(null, null);
String temp_string = System.getProperty("java.home")
+ File.separator + "lib" + File.separator
+ "javax.comm.properties";
Method loadDriver_Method = CommPortIdentifier.class.getDeclaredMethod(
"loadDriver", new Class[] {String.class});
loadDriver_Method.setAccessible(true); // unprotect it
loadDriver_Method.invoke(null, new Object[] {temp_string});
} catch (Exception e) {
//Faça seu log aqui, removi o código do meu
}
}
então, eu copiei os arquivos para os seguintes locais:
win32com.dll —> C:\Arquivos de programas\Java\jre6\bin
javax.comm.properties --> C:\Arquivos de programas\Java\jre6\lib
comm.jar --> C:\Arquivos de programas\Java\jre6\lib\ext
é assim q vc distribuiu os arquivos?
Apenas por curiosidade, você experimentou a biblioteca rxtxcomm? Essa biblioteca tem sido usada de forma “oficial” quando se fala de porta serial (nesse caso também trabalha com porta paralela), sendo ela de configuração mais simples que a Javacomm e com uma quantidade de SO’s suportados mais ampla que o Javacomm (nesse caso tem até para mac enquanto a Javacomm da suporte apenas para linux, sem suporte para win).
O caso que o viny descreveu é real caso você tenha conversores de usb sendo instalados no computador durante o tempo de execução do seu programa.
Não. Geralmente eu mexo na própria configuração do projeto, explicitamente.
Até pq fica mais fácil de distribuir o executável depois.
Como fiz a configuração em Eclipse, não saberia te orientar exatamente como proceder para o netbeans.
Era o que ocorria comigo.
olá amigos…
eu fiz o teste com a RxTxCom, e com ela eu consegui ver as portas pela IDE do Netbeans. Acho que vou usar ela ao invéz da JavaComm. Vlw pelas dicas