Pessoal, estou com um problema que ja não sei mais como resolver… Comprei uma unicade de BlueTooth da LG “LWB-100”, preciso desenvolver um sisteminha que vai receber informações de um Palm, mas este sisteminha vai rodar em um PC normal, por isso estou tendo que faze-lo no Java SE e não no ME, o ME estou utilizando apenas ára fazer o programa que ficará no palm… O do palm td certo… Mas o do PC estou tendo um sério problema…
OBS: Estou utilizando o NetBeans 5.5 com JSE 6 e o Wireles Tool Kit 2.5
Ele compila… Mas quando vou executar ele da o seguinte erro:
run:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no intelbth in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.intel.bluetooth.BluetoothPeer.<clinit>(Unknown Source)
at javax.bluetooth.LocalDevice.<init>(Unknown Source)
at javax.bluetooth.LocalDevice.getLocalDevice(Unknown Source)
at Servidor_Serial.inicia_servidor(Servidor_Serial.java:64)
at Servidor_Serial.main(Servidor_Serial.java:56)
Java Result: 1
Em diversos foruns internacionais encontrei pessoas com o mesmo problema, porém a resposta é sempre a mesma: Copie o arquivo intelbth.dll para a pasta c:\windows\system32.
Porém, não existe esta DLL em minha máquina… e não achei para baixar… Alguem sabe me ajudar???
Conto com a ajuda de vcs…
segue abaixo o meu código completo:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.DataElement;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.io.StreamConnectionNotifier;
/**
* Exemplo de um Servidor Serial RFCOMM Bluetooth em J2SE utilizando a Pilha BlueCove e um
* dispositivo USB TDK Styla Bluetooth que aceita conexões de um MIDlet.
*
* Este exemplo de servidor somente atende um Serial Port Profile Server
* e espera o cliente MIDlet para se conectar. Uma vez o cliente aceito, ele lê
* uma string da conexão stream vinda do cliente, mostra esta string na tela,
* então envia esta string de volta para o cliente informando que recebeu OK.
* Após ele então espera pela próxima conexão de cliente novamente.
*
* Como a intenção do Servidor Serial não é Descobrir clientes, ele não implementa
* um Discovery Agent.
*
* @author Maiquel Goelzer
*/
public class Servidor_Serial implements Runnable {
// Define o Dispositivo Local e o Agente
LocalDevice dispositivo;
// Aqui é definido o Identificador Universal UUID do Serviço Serial que será iniciado
// O UUID é baseado nas normas ISO/IEC 11578
public UUID uuid = new UUID("102030405060708090A1B1C1D1E1F111", false);
// Aqui se define o tipo de Classe de Serviço que será iniciada,
// Estes tipos são pré-definidos pelo sistema de classes de serviço Bluetooth
// mas podem ser especificado também conforme abaixo utilizamos o código da
// classe de serviço de telefone que é padronizado pelo código 0x400000.
private int SERVICO_WEBMOBILE = 0x400000;
// Controle de Saida para espera de clientes
public boolean acabou = false;
// Aqui é definida a conexão Bluetooth para o servidor serial
public StreamConnectionNotifier conexaoServidorStream;
public static void main(String[] args ) {
new Servidor_Serial().inicia_servidor();
}
public void inicia_servidor() {
try {
// Inicializa a Pilha de Protocolos Java Bluetooh
// e captura o objeto dispositivo local Bluetooth
dispositivo = LocalDevice.getLocalDevice();
// Existem 2 formas de definir o tempo de descoberta de um dispositivo
// GIAC - General Inquiry Access Code - Significa que o dispositivo sempre ficará disponivel para descoberta
// LIAC - Limited Inquiry Access Code - Significa que o dispositivo ficará por um tempo disponivel para ser
// descoberto, após este tempo que é de aproximadamente 1 minutos ele se torna Indisponivel.
dispositivo.setDiscoverable(DiscoveryAgent.GIAC);
// Inicia uma thread para servir as conexões
Thread t = new Thread( this );
t.start();
// Tratamento de excessões caso ocorra alguma falha em capturar o dispositivo local ou definir o
// o modo de descoberta do DiscoveryAgent
} catch ( BluetoothStateException e ) {
e.printStackTrace();
}
}
public void run() {
// Nome do Serviço que será passado na URL de conexão do Servidor Serial
String nomeServico = "WebMobileRFCOMM";
// Define a conexão stream que será utilizada para o dispositivo remoto.
StreamConnection conexao = null;
try {
while (!acabou){
String url = "btspp://localhost:" + uuid.toString() +";nome="+ nomeServico;
System.out.println("--------------------------------------------------------------------------------------------------");
System.out.println("URL - Endereço Servidor : " + url );
// Cria um objeto para conexão do servidor, Create a server connection object, using a
// utilizando o Serial Port Profile, especificando a URL e o UUID e definindo
// o nome de serviço WebMobileRFCOMM
conexaoServidorStream = (StreamConnectionNotifier)Connector.open( url );
// Carrega o template do Service Record que é utilizado abaixo para definir os
// atributos do dispositivo para o serviço que será criado
ServiceRecord template = dispositivo.getRecord( conexaoServidorStream );
// Código padrão para definir o atributo do ServiceRecrod como ServiceAvailability (0x0008)
// Este atributo infica que o serviço esta disponivel para ser utilizado
// 0xFF Indica que o serviço esta totalmente disposinivel
template.setAttributeValue( 0x0008, new DataElement( DataElement.U_INT_1, 0xFF ) );
// Os serviços em Bluetooth trabalham com 2 tipos de categorias:
// Major e Minor - O Major define se o serviço do dispositivo é um Dispositivo Móvel Celular,
// Audio, GPS, Rede, etc. Já o Minor define os detalhes mais especificos da categoria Major.
// Os conjuntos de códigos que definem cada dispositivo são especificados pela implementação
// da pilha protocolos Bluetooth, existem valor Hexadecimais padrão de identificação e também
// pode-se criar um serviço em uma área Hexadecimal reservada para definição de categorias.
template.setDeviceServiceClasses( SERVICO_WEBMOBILE );
System.out.println("Servidor --> Esperando pela Conexão do Cliente...");
// Começa a aceitar conexões clientes, este métodos fica bloqueado enquanto
// um cliente estiver conectado.
conexao = conexaoServidorStream.acceptAndOpen();
System.out.println("Servidor --> Foi aceita a conexão de um cliente, lendo dados...");
// Retorna o objeto do dispositivo remoto
RemoteDevice dispositivoRemoto = RemoteDevice.getRemoteDevice( conexao );
// Carrega a entrada Stream do dispositivo Remoto
DataInputStream entrada = conexao.openDataInputStream();
// Lê as entradas no padrão UTF para uma String
String dados1 = entrada.readUTF();
String dados2 = entrada.readUTF();
System.out.println("Recebendo --> MAC do Cliente : ( '"+dados2+"' )");
System.out.println("Recebendo --> Dados do Cliente : ( '"+dados1+"' )");
// Carrega a saida Stream UTF para enviar de volta para o Dispositivo a confirmação de recebido OK
// juntamente com o dado enviado.
DataOutputStream saida = conexao.openDataOutputStream();
saida.writeUTF("Endereço Servidor: "+dispositivo.getBluetoothAddress());
saida.writeUTF("Dados: "+ dados1 + " ACK (Recebido OK pelo Servidor) ");
saida.flush();
System.out.println("Dados ( '"+dados1+"' ) foi retornado ( ACK ) + MAC Servidor");
// Fecha o stream e a conexao do servidor e a partir dai espera por um novo cliente Bluetooth
saida.close();
conexaoServidorStream.close();
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getClass().getName()+" "+e.getMessage());
}
}
}