RXTX - Comunicação Serial - Não consigo rodar como applet

Olá,

eu criei um applet para comunicar via serial usando rxtx. Pelo netbeans eu consigo comunicar corretamente com o equipamento serial. Quando eu compilo o jar, assino, e tento chamar a comunicação serial pela página, dá erro.

Segue erro abaixo:

Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
Erro abrindo a comunicação: java.lang.NullPointerException

Já acertei o java.policy para liberar (antes dava erro de permissão de acesso) com o conteúdo:

permission java.lang.RuntimePermission "loadLibrary.rxtxSerial";
permission java.io.FilePermission "${java.home}${/}lib${/}ext${/}x86${/}rxtxSerial.dll", "read";
permission java.util.PropertyPermission "gnu.io.SerialPorts", "read";
permission java.util.PropertyPermission "gnu.io.rxtx.SerialPorts", "read";
permission java.util.PropertyPermission "gnu.io.ParallelPorts", "read";
permission java.util.PropertyPermission "gnu.io.rxtx.ParallelPorts", "read";
permission java.lang.RuntimePermission "modifyThreadGroup";
permission java.lang.RuntimePermission "modifyThread";		

Mas não consigo fazer comunicar de jeito nenhum.

Alguma sugestão ?

Abraço a todos.

como você esta carregando sua DLL?
Se da algum erro, post o erro aqui.

Acredito que a dll está sendo carregada, pois pus uma copia na pasta %system32% e na mesma pasta do jar.

abraço.

Ta mais cade o código do seu applet onde você carrega a DLL.
Tenta carregar dessa forma.

try{
    AccessController.doPrivileged(new PrivilegedAction()
    {
        public Object run()
    {
        try
        {
                    // privileged code goes here, for example:
         System.load("C:/Program Files/.../Mydll.dll");

         return null; // nothing to return
         } 
                 catch (Exception e)
         {
             System.out.println("Unable to load Mydll");
         return null;
         }
    }
     });
} 
    catch (Exception e)
{
        System.out.println("Unable to load Mydll");
}

fonte: http://stackoverflow.com/questions/1713403/calling-a-dll-from-an-applet-via-jni

Desculpe a resposta, mas acho que carregar a biblioteca é feito pelo rxtx.jar
Habilitei uns logs aqui, veja como tá o código:

public void AbrirPorta() { try { System.out.println("abrindo porta... 1"); porta = (SerialPort) cp.open("SerialComLeitura", timeout); System.out.println("abrindo porta... 2"); PortaOK = true; //configurar parâmetros System.out.println("abrindo porta... 3"); porta.setSerialPortParams(baudrate, porta.DATABITS_8, porta.STOPBITS_1, porta.PARITY_NONE); System.out.println("abrindo porta... 4"); porta.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); System.out.println("abrindo porta... 5"); } catch (Exception e) { PortaOK = false; System.out.println("Erro abrindo comunicação: " + e); System.exit(1); } }

O applet gera o log até “ABRINDO PORTA… 3”, ou seja: ele dá erro no momento de setar os parametros para a porta serial:

Quando executo pelo netbeans, veja o log que aparece:

Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
abrindo porta… 1
abrindo porta… 2
abrindo porta… 3
abrindo porta… 4
abrindo porta… 5
Iniciando envio de dados…
FLUXO OK!
Enviando um byte para COM1
Enviando : PING
Serial event!
OK
Dados lidos: OK

Abraço!

hahahaha
vou te falar o q fiz:

:idea:comentei o código que seta os parametros da serial… E funcionou!
Ou seja: agora é rever o que podemos fazer para acertar essa configuração de velocidade da serial. Acho que isso é que devemos rever…

Veja como ficou:

[code] public void AbrirPorta() {
try {
System.out.println(“abrindo porta… 1”);
porta = (SerialPort) cp.open(“SerialComLeitura”, timeout);
System.out.println(“abrindo porta… 2”);
PortaOK = true;
//configurar parâmetros
System.out.println(“abrindo porta… 3”);

        //porta.setSerialPortParams(baudrate,porta.DATABITS_8,porta.STOPBITS_1,porta.PARITY_NONE);
        System.out.println("abrindo porta... 4");

// porta.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
System.out.println(“abrindo porta… 5”);
} catch (Exception e) {
PortaOK = false;
System.out.println("Erro abrindo comunicação: " + e);
System.exit(1);
}
}
[/code]

abraço!!!

[quote=andsilva81]Olá,

eu criei um applet para comunicar via serial usando rxtx. Pelo netbeans eu consigo comunicar corretamente com o equipamento serial. Quando eu compilo o jar, assino, e tento chamar a comunicação serial pela página, dá erro.

Segue erro abaixo:

Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
Erro abrindo a comunicação: java.lang.NullPointerException

Já acertei o java.policy para liberar (antes dava erro de permissão de acesso) com o conteúdo:

permission java.lang.RuntimePermission "loadLibrary.rxtxSerial";
permission java.io.FilePermission "${java.home}${/}lib${/}ext${/}x86${/}rxtxSerial.dll", "read";
permission java.util.PropertyPermission "gnu.io.SerialPorts", "read";
permission java.util.PropertyPermission "gnu.io.rxtx.SerialPorts", "read";
permission java.util.PropertyPermission "gnu.io.ParallelPorts", "read";
permission java.util.PropertyPermission "gnu.io.rxtx.ParallelPorts", "read";
permission java.lang.RuntimePermission "modifyThreadGroup";
permission java.lang.RuntimePermission "modifyThread";		

Mas não consigo fazer comunicar de jeito nenhum.

Alguma sugestão ?

Abraço a todos.[/quote]
ola, tudo bem? sou iniciante em java e o meu projeto esta dando erro de “UnsatisfiedLinkError” acredito que pode ser a configuração “VM” vcs poderiam me ajudar a configurar isso?muito obrigado.

[quote=andsilva81]Desculpe a resposta, mas acho que carregar a biblioteca é feito pelo rxtx.jar
Habilitei uns logs aqui, veja como tá o código:

public void AbrirPorta() { try { System.out.println("abrindo porta... 1"); porta = (SerialPort) cp.open("SerialComLeitura", timeout); System.out.println("abrindo porta... 2"); PortaOK = true; //configurar parâmetros System.out.println("abrindo porta... 3"); porta.setSerialPortParams(baudrate, porta.DATABITS_8, porta.STOPBITS_1, porta.PARITY_NONE); System.out.println("abrindo porta... 4"); porta.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); System.out.println("abrindo porta... 5"); } catch (Exception e) { PortaOK = false; System.out.println("Erro abrindo comunicação: " + e); System.exit(1); } }

O applet gera o log até “ABRINDO PORTA… 3”, ou seja: ele dá erro no momento de setar os parametros para a porta serial:

Quando executo pelo netbeans, veja o log que aparece:

Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
abrindo porta… 1
abrindo porta… 2
abrindo porta… 3
abrindo porta… 4
abrindo porta… 5
Iniciando envio de dados…
FLUXO OK!
Enviando um byte para COM1
Enviando : PING
Serial event!
OK
Dados lidos: OK

Abraço![/quote]

Boa Tarde andsilva81!

Creio que estou utilizando o mesmo código que você para comunicar com a porta serial.
Não estou conseguindo obter resposta do dispositivo, que no meu caso seria um modem 3g.

Ele aparece:

Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
FLUXO OK!
Enviando um byte para COM3
Enviando : AT+CFUN?

Depois disso ele trava

Eu estou chamando este código para enviar

[code]
public void EnviarUmaString(String msg) {
HabilitarEscrita();
ObterIdDaPorta();
AbrirPorta();

    if (Escrita == true) {
        try {
            saida = porta.getOutputStream();
            System.out.println("FLUXO OK!");
        } catch (Exception e) {
            System.out.println("Erro.STATUS: " + e);
        }
        try {
            System.out.println("Enviando um byte para " + Porta);
            System.out.println("Enviando : " + msg);
            saida.write(msg.getBytes());
            saida.close();
            HabilitarLeitura();
            LerDados();
            
            Thread.sleep(4000);
            FecharCom();

// saida.flush();
} catch (Exception e) {
System.out.println("Houve um erro durante o envio. ");
System.out.println("STATUS: " + e);
e.printStackTrace();
System.exit(1);
}
} else {
System.exit(1);
}
}[/code]

Pode me dar uma ajuda?