Boa tarde pessoal, estou desenvolvendo um sistema que a partir de uma applet chama uma dll, porém, o que está acontecendo é que ao chamar a dll parece que essa dll fica na memória, com isso em determinados momentos nem sempre… a applet lança um erro de que a dll já está carregada em outro classloader, porém se eu abrir um outro browser após o erro e clicar na função volta a funcionar, logo gostaria de saber se tem como eu descarregar a applet se é que existe isso, através de algum comando ?
Se você puder migrar seu sistema para Java 7 (que nem foi lançado ainda - argh), ele tem um método para fechar um classloader. Isso talvez ajude a resolver seu problema, mas não é garantido.
Usar DLLs com applets tem esse problema, que é simplesmente insanável hoje em dia.
Se puder evitar isso, tanto melhor,. Infelizmente, você deve saber de antemão que mesmo usando um truque com classloaders (ou seja, remover todos os objetos criados por esse classloader classloader e forçá-lo a ser fechado e descarregado da memória - para que a DLL seja desmapeada - forçando um monte de vezes System.gc) simplesmente não funciona direito.
alberto_ribeiro
nossa, então se o meu sistema tiver que ser com applet chamando a dll eu não tenho como corrigir isso, não existe uma forma para contornar essa situação ?
Caracas você conhece algo que possa fazer, pois o cliente deseja que seja assim rssss
obrigado pela resposta
alberto_ribeiro
opa um comentário apenas, quando eu fecho o browser e abro novamente o applet é carregado e volta a funcionar, será que não tem como eu restartar esse applet ?
[]'s
E
entanglement
alberto_ribeiro:
nossa, então se o meu sistema tiver que ser com applet chamando a dll eu não tenho como corrigir isso, não existe uma forma para contornar essa situação ?
Caracas você conhece algo que possa fazer, pois o cliente deseja que seja assim rssss
obrigado pela resposta
A única forma que eu conheço é instalar a DLL e o JAR que define as classes dessa DLL junto com a JRE que é usada pelos applets nesse browser. (A DLL fica em C:\Program Files\Java\jre6\bin e o jar em C:\Program Files\Java\jre6\lib\ext, por exemplo. Dessa maneira, tanto a DLL quanto o JAR nunca seriam descarregados pelo browser e não haveria esse erro " dll já está carregada em outro classloader" porque a DLL seria carregada pelo classloader default. Só que aí tanto a DLL quanto o JAR seriam muito difíceis de atualizar, e se houver a atualização automática da JRE, talvez o diretório mude, o que pode ocasionar problemas.
Alexandre_Saudate
Tive esse problema, uma vez, com dois JAR´s de applets acessando a mesma biblioteca. É seu caso?
[]´s
alberto_ribeiro
Na verdade tenho uma applet que chama uma dll depois de um determinado tempo ela acusa o erro citado no post…
poderia tentar o que entanglement disse mas se mudarem as pastas vao me matar rsss
E
entanglement
Ou seja, basta dar um Ctrl+F5 (ou F5) na página que isso pode ocorrer. Será?
alberto_ribeiro
sim se executar a applet novamente ocorre… agora o engraçado é se eu fechar o browser e abrir novamente ele starta a applet denovo e tudo volta a funcionar
mas dai é ruim ficar mandando o cara fechar e abrir quando ocorrer isso rss
alberto_ribeiro
Pessoal não sei se o jeito que fiz é o melhor massss segui os conselhos de entanglement, coloquei diretamento nas pastas do java, agora se der qualquer problema de mudança de pasta terei que instalar tudo denovo… mas é o que deu pra fazer agora…