Não consigo acessar a Porta Serial USB com o javax.comm;

1 resposta
thokk

Estou com um certo problema, quando startup minha aplicação, ela funciona tudo bonitinho, mas quando tento me conectar a USB… Da alguns erros, diz que não consegue achar o driver. Imagino que seja erro no api comm. Pois fora da aplicação a USB funciona blzinha.

Gostaria de alguns comentarios e se alguém sofreu este tipo de problema???

Grato

1 Resposta

ViniGodoy

Você tem um driver USB que simula uma serial, é isso?

O javax.com tem um problema. Ele só detecta as portas no momento que a classe é inicializada. Por isso, se você subir sua aplicação ANTES da porta USB ser "transformada" numa COM, ela nunca estará disponível para sua aplicação.

O método que faz essa detecção é private, então não há uma maneira fácil de chama-lo.

A maneira difícil, usando reflection, é essa aqui:

/**
     * Refreshes the port list, redetect all system ports. It's desirable that no 
     * serial connection is openned before calling this method.
     */
    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 o log dessa exceção. Removi meu código específico para isso.
        }
    }

Esse método atualiza a lista de portas. Você pode usa-lo antes de exibir as portas para o usuário escolher, ou antes de sua classe tentar acessar sua porta padrão USB.

Criado 29 de outubro de 2007
Ultima resposta 29 de out. de 2007
Respostas 1
Participantes 2